[英]Django: Url routing to the wrong file, but correct location: TemplateDoesNotExist Error
我正在嘗試顯示一個名為visit-form.html
的文件,但是由於某種原因,Django一直在尋找一個名為visit_form.html
的文件(不同之處在於下划線)。 因此,我不斷收到TemplateDoesNotExist
錯誤。
我嘗試清除瀏覽器緩存,使Pycharm緩存無效(“文件”>“使緩存無效”)。 我已經在整個程序中搜索了visit_form.html
文件或代碼,但是找不到(我在舊文件路徑中找到一個文件或代碼,並沒有更改就刪除了該文件)。
錯誤如下,第一個網址位於正確的文件位置,但問題似乎出在我無法擺脫的文件名上。
TemplateDoesNotExist at /clincher/visit/add/2
clincher/visit_form.html
Request Method: GET
Request URL: http://127.0.0.1:8000/clincher/visit/add/2
Django Version: 2.0.4
Exception Type: TemplateDoesNotExist
Exception Value: clincher/visit_form.html
Exception Location: /Users/nrsmoll/venv/lib/python3.6/site-packages/django/template/loader.py in select_template, line 47
Python Executable: /Users/nrsmoll/venv/bin/python
Python Version: 3.6.4
Python Path:
['/Users/nrsmoll/PycharmProjects/clincher',
'/Users/nrsmoll/PycharmProjects/clincher',
'/Library/Frameworks/Python.framework/Versions/3.6/lib/python36.zip',
'/Library/Frameworks/Python.framework/Versions/3.6/lib/python3.6',
'/Library/Frameworks/Python.framework/Versions/3.6/lib/python3.6/lib-dynload',
'/Users/nrsmoll/venv/lib/python3.6/site-packages',
'/Users/nrsmoll/venv/lib/python3.6/site-packages/setuptools-28.8.0-py3.6.egg',
'/Users/nrsmoll/venv/lib/python3.6/site-packages/pip-9.0.1-py3.6.egg',
'/Applications/PyCharm.app/Contents/helpers/pycharm_matplotlib_backend']
Server time: Wed, 6 Jun 2018 09:20:19 +0000`
接着:
Template-loader postmortem
Django tried loading these templates, in this order:
Using engine django:
django.template.loaders.filesystem.Loader: /Users/nrsmoll/PycharmProjects/clincher/templates/clincher/visit_form.html (Source does not exist)
django.template.loaders.app_directories.Loader: /Users/nrsmoll/PycharmProjects/clincher/clincher/templates/clincher/visit_form.html (Source does not exist)
django.template.loaders.app_directories.Loader: /Users/nrsmoll/venv/lib/python3.6/site-
packages/django/contrib/admin/templates/clincher/visit_form.html (Source does not exist)
django.template.loaders.app_directories.Loader: /Users/nrsmoll/venv/lib/python3.6/site-
packages/django/contrib/auth/templates/clincher/visit_form.html (Source does not exist)
Urls.py
urlpatterns = [
# /main/
path('', views.index, name='index'),
#/main/<main_id>/
path('main/', views.MainListView.as_view(), name='main'),
path('main/<int:pk>', views.MainDetailView.as_view(), name='main-detail'),
path('visit/add/<int:pk>', views.VisitCreate.as_view(), name='visit-form'),
url(r'main/add/$', views.MainCreate.as_view(), name='main-add'),
#/main/main/2/
url(r'^(?P<pk>[0-9]+)/$', views.MainUpdate.as_view(), name='main-update'),
#/main/main/2/
url(r'^(?P<pk>[0-9]+)/delete/$', views.MainDelete.as_view(), name='main-delete'),
]
Views.py
class VisitCreate(CreateView):
model = Visit
fields = ['fk_visit_main', 'visit_progress_notes']
def get_success_url(self):
return reverse('clincher:main-detail', args={'pk': self.object.id})
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',
],
},
},
]
visit-form
(正確文件)的原始鏈接是:
HTML模板
<td><a href="{% url 'clincher:visit-form' main.id %}" role="button" class="btn btn-primary btn-xs">New Consult</a></td>
模板名稱與URL模式中的名稱無關。
您可以在視圖中設置模板名稱:
class VisitCreate(CreateView):
model = Visit
fields = ['fk_visit_main', 'visit_progress_notes']
template_name = 'clincher/visit-form.html'
但是,由於默認情況下create視圖使用 <app_name>/<model_name>_form.html
(全部為小寫),因此最好重命名模板以使用下划線而不是連字符。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.