【问题标题】:Django CRUD template not showing upDjango CRUD 模板未显示
【发布时间】:2020-06-04 09:54:32
【问题描述】:

我正在使用类实例制作一个 CRUD 应用程序。 我的应用是一个非常简单的会计应用:

姜戈:3.03 Python:3.8.0

accounts/models.py

class Project(models.Model):
    ## normal fields

accounts/views.py

class ProjectCreate(CreateView):
    model = Project
    fields = '__all__'

class ProjectUpdate(UpdateView):
    model = Project
    fields = '__all__'

class ProjectDelete(DeleteView):
    model = Project
    success_url = reverse_lazy('project')

accounts/urls.py:

urlpatterns = [

path('project/create/', project_views.ProjectCreate.as_view(), name='project_create'),
    path('project/<int:pk>/update/', project_views.ProjectUpdate.as_view(), name='project_update'),
    path('project/<int:pk>/delete/', project_views.ProjectDelete.as_view(), name='project_delete'),

]

我在以下目录下有2个模板文件:

accounts
    accounts
        templates
            project
                project_form.html
                project_confirm_delete.html
        models.py
        urls.py
        views.py
        forms.py

当我调用视图时:

http://localhost:8000/accounts/project/create/

我收到以下错误:

47, in select_template
    raise TemplateDoesNotExist(', '.join(template_name_list), chain=chain)
django.template.exceptions.TemplateDoesNotExist: accounts/project_form.html

settings.py:

TEMPLATES = [
    {
        'BACKEND': 'django.template.backends.django.DjangoTemplates',
        'DIRS': [],
        'APP_DIRS': True,
        'OPTIONS': {
            'context_processors': [
                'django.contrib.auth.context_processors.auth',
                'django.template.context_processors.debug',
                'django.template.context_processors.static',
                'django.template.context_processors.tz',
                'django.contrib.messages.context_processors.messages',
                'accounts.utils.accounts_vars',
            ],
        },
    },
]

我无法弄清楚为什么这不起作用。你能帮忙吗? 任何帮助将非常感激。谢谢。

【问题讨论】:

  • 应该是/accounts/templates/accounts/project_form.html 还要检查你的设置docs.djangoproject.com/en/3.0/topics/templates/#configuration
  • 模板设置为: TEMPLATES = [ { 'BACKEND': 'django.template.backends.django.DjangoTemplates', 'DIRS': [], 'APP_DIRS': True, 'OPTIONS': { 'context_processors': ['django.contrib.auth.context_processors.auth', 'django.contrib.messages.context_processors.messages', 'account.utils.account_vars', ], }, }, ]
  • 看看我评论的第一部分。
  • Ivan,实际的文件夹布局和你建议的完全一样(我的错误是我没有在原帖中写完整的文件夹路径)。
  • 你做了,你的文件夹结构不是我说的。在“模板”下,您有“项目” - 而不是“帐户”。

标签: python django


【解决方案1】:

检查您的 settings.py 文件

视图无法呈现您的模板。在 settings.py 中提及模板目录,并检查您的模板是否存在

【讨论】:

  • 我已经在评论中发布了模板设置。我认为我使用了正确的模板设置
【解决方案2】:

您没有告诉您的视图使用哪个模板。您可以通过在视图中设置 template_name 参数来做到这一点,例如:

class ProjectUpdate(UpdateView):  
      model = Project 
      fields = '__all__'
      template_name = 'project/project_form.html

'

【讨论】:

  • 我能做到。但随后我在视图中对模板文件进行硬编码。这不是错了吗?
  • 这至少是docs中描述的标准方式。如果未提供名称,CBV 的get_template_names 方法具有用于查找模板的特定算法。但是您的模板没有所需的名称模式(app_name/modelname_suffix.html),我并没有真正看到您不传递模板名称的优势。
猜你喜欢
  • 2018-09-03
  • 2012-05-24
  • 1970-01-01
  • 1970-01-01
  • 2018-12-11
  • 2019-02-19
  • 2015-05-14
  • 2015-11-09
  • 2013-06-23
相关资源
最近更新 更多