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.htmlproduct_create.html 我该怎么办?

我有点不清楚你的目录结构,因为你说的是​​“另一个目录”,而不是子目录。

Django 中的良好做法是使用 appname 将目录嵌套在模板目录下,所以在我们的例子中

project/templates/products/product_create.html

应该可以解决问题。

您可以将 templates 文件夹放在项目根目录中,或者您可以将它放在开发人员的应用程序目录中(因为您已将 APP_DIRS 设置为 True),但是你需要保持相同的嵌套结构。

就目前而言,您的项目只是找不到正确的模板。您的视图路径正确,但模板位置错误。