Django 模型表单(模板不存在)
Django Model Forms ( Template Doesn't Exist)
我正在处理 Django 模型表单。我创建了 forms.py
并添加了以下内容:
from django import forms
from .models import Product
class ProductForm(forms.ModelForm):
class Meta:
model = Product
fields = [
'title',
'description',
'price'
]
我在 my views.py
中将其渲染如下:
def product_create_view(request):
form = ProductForm(request.POST or None)
if form.is_valid():
form.save()
context = {
'form': form
}
return render(request, "products/product_create.html", context)
并且我添加了 urls.py
:
from django.contrib import admin
from django.urls import path
from pages.views import home_view , contact_view, about_view, social_view
from products.views import product_detail_view, product_create_view
urlpatterns = [
path('', home_view, name='home'),
path('contact/', contact_view),
path('admin/', admin.site.urls),
path('about/', about_view),
path('create/', product_create_view),
path('product/', product_detail_view),
path('social/', social_view),
]
我已经迁移了所有内容并保存了所有文件,但是当我想转到我的创建 URL 时,我收到此错误:
TemplateDoesNotExist at /create/
products/product_create.html
Request Method: GET
Request URL: http://127.0.0.1:8000/create/
Django Version: 3.2.4
Exception Type: TemplateDoesNotExist
Exception Value:
products/product_create.html
Exception Location: C:\Users\Invoker\dev\trydjango\env\lib\site-packages\django\template\loader.py, line 19, in get_template
Python Executable: C:\Users\Invoker\dev\trydjango\env\Scripts\python.exe
Python Version: 3.9.5
Python Path:
['C:\Users\Invoker\dev\trydjango\src\sadra',
'C:\Program Files\Python39\python39.zip',
'C:\Program Files\Python39\DLLs',
'C:\Program Files\Python39\lib',
'C:\Program Files\Python39',
'C:\Users\Invoker\dev\trydjango\env',
'C:\Users\Invoker\dev\trydjango\env\lib\site-packages']
Server time: Wed, 23 Jun 2021 08:20:29 +0000
我也创建了一个模板:
{% 扩展 'base.html' %}
{% block content %}
<form>
{{ form.as_p }}
<input type='submit' value='Save' />
</form>
{% endblock %}
settings.py
中的模板是这样的:
TEMPLATES = [
{
'BACKEND': 'django.template.backends.django.DjangoTemplates',
'DIRS': [os.path.join(BASE_DIR, "templates")],
'APP_DIRS': True,
'OPTIONS': {
'context_processors': [
'django.template.context_processors.debug',
'django.template.context_processors.request',
'django.contrib.auth.context_processors.auth',
'django.contrib.messages.context_processors.messages',
],
},
},
]
我的模板位于根目录中名为 templates 的文件夹中。在那里我有另一个名为 products 的文件夹,其中包括 detail.html
和 product_create.html
我该怎么办?
我有点不清楚你的目录结构,因为你说的是“另一个目录”,而不是子目录。
Django 中的良好做法是使用 appname 将目录嵌套在模板目录下,所以在我们的例子中
project/templates/products/product_create.html
应该可以解决问题。
您可以将 templates
文件夹放在项目根目录中,或者您可以将它放在开发人员的应用程序目录中(因为您已将 APP_DIRS
设置为 True
),但是你需要保持相同的嵌套结构。
就目前而言,您的项目只是找不到正确的模板。您的视图路径正确,但模板位置错误。
我正在处理 Django 模型表单。我创建了 forms.py
并添加了以下内容:
from django import forms
from .models import Product
class ProductForm(forms.ModelForm):
class Meta:
model = Product
fields = [
'title',
'description',
'price'
]
我在 my views.py
中将其渲染如下:
def product_create_view(request):
form = ProductForm(request.POST or None)
if form.is_valid():
form.save()
context = {
'form': form
}
return render(request, "products/product_create.html", context)
并且我添加了 urls.py
:
from django.contrib import admin
from django.urls import path
from pages.views import home_view , contact_view, about_view, social_view
from products.views import product_detail_view, product_create_view
urlpatterns = [
path('', home_view, name='home'),
path('contact/', contact_view),
path('admin/', admin.site.urls),
path('about/', about_view),
path('create/', product_create_view),
path('product/', product_detail_view),
path('social/', social_view),
]
我已经迁移了所有内容并保存了所有文件,但是当我想转到我的创建 URL 时,我收到此错误:
TemplateDoesNotExist at /create/
products/product_create.html
Request Method: GET
Request URL: http://127.0.0.1:8000/create/
Django Version: 3.2.4
Exception Type: TemplateDoesNotExist
Exception Value:
products/product_create.html
Exception Location: C:\Users\Invoker\dev\trydjango\env\lib\site-packages\django\template\loader.py, line 19, in get_template
Python Executable: C:\Users\Invoker\dev\trydjango\env\Scripts\python.exe
Python Version: 3.9.5
Python Path:
['C:\Users\Invoker\dev\trydjango\src\sadra',
'C:\Program Files\Python39\python39.zip',
'C:\Program Files\Python39\DLLs',
'C:\Program Files\Python39\lib',
'C:\Program Files\Python39',
'C:\Users\Invoker\dev\trydjango\env',
'C:\Users\Invoker\dev\trydjango\env\lib\site-packages']
Server time: Wed, 23 Jun 2021 08:20:29 +0000
我也创建了一个模板: {% 扩展 'base.html' %}
{% block content %}
<form>
{{ form.as_p }}
<input type='submit' value='Save' />
</form>
{% endblock %}
settings.py
中的模板是这样的:
TEMPLATES = [
{
'BACKEND': 'django.template.backends.django.DjangoTemplates',
'DIRS': [os.path.join(BASE_DIR, "templates")],
'APP_DIRS': True,
'OPTIONS': {
'context_processors': [
'django.template.context_processors.debug',
'django.template.context_processors.request',
'django.contrib.auth.context_processors.auth',
'django.contrib.messages.context_processors.messages',
],
},
},
]
我的模板位于根目录中名为 templates 的文件夹中。在那里我有另一个名为 products 的文件夹,其中包括 detail.html
和 product_create.html
我该怎么办?
我有点不清楚你的目录结构,因为你说的是“另一个目录”,而不是子目录。
Django 中的良好做法是使用 appname 将目录嵌套在模板目录下,所以在我们的例子中
project/templates/products/product_create.html
应该可以解决问题。
您可以将 templates
文件夹放在项目根目录中,或者您可以将它放在开发人员的应用程序目录中(因为您已将 APP_DIRS
设置为 True
),但是你需要保持相同的嵌套结构。
就目前而言,您的项目只是找不到正确的模板。您的视图路径正确,但模板位置错误。