我的django项目中有两个应用程序使用相同的名称。配置了名称空间后,我仍然会遇到冲突。例如,当我访问localhost:8000/nt/
时,我从另一个应用程序中获取模板。(localhost:8000/se/ points to right template)。
我一定是漏掉了什么。下面是代码:
- dj_配置/urls.py*
urlpatterns = [
path("se/", include("simplevent.urls", namespace="se")),
path("nt/", include("nexttrain.urls", namespace="nt")),
# ...
]
- DJ应用程序/简单事件/urls.py*
from . import views
app_name = "simplevent"
urlpatterns = [
path(route="", view=views.Landing.as_view(), name="landing")
]
- dj应用程序/下一列车/urls.py*
from django.urls import path
from . import views
app_name = "nexttrain"
urlpatterns = [
path(route="", view=views.Landing.as_view(), name="landing"),
]
- dj_配置/settings.py*
INSTALLED_APPS = [
"dj_apps.simplevent.apps.SimpleventConfig",
"dj_apps.nexttrain.apps.NexttrainConfig",
# ...
]
TEMPLATES = [
{
# ....
"DIRS": [],
"APP_DIRS": True,
}
两个视图将具有相同的代码:
class Landing(TemplateView):
template_name = "landing.html"
模板位于:
- dj_apps/simplevent/templates/landing.html
- dj_apps/nexttrain/templates/landing.html
请注意,颠倒INSTALLED_APPS中应用程序的顺序将逆转问题(/se
将指向nexttrain应用程序)。
1条答案
按热度按时间p8h8hvxi1#
在查找模板文件时,模板后端所期望的通常结构是:
<your app>/templates/<your app>/some_template.html
,因此模板路径应为:dj_apps/simplevent/templates/simplevent/landing.html
dj_apps/nexttrain/templates/nexttrain/landing.html
Django这样做是因为当
collectstatic
运行时,它实际上会从每个应用的templates文件夹中复制文件,并将其放置在一个静态文件夹中。这就是为什么应用名称需要在路径中出现两次的原因。因为在最后一个文件夹中,应用名称已经在那里了。你可以在你的应用程序中覆盖第三方应用程序(如管理员)的模板。这听起来有点太复杂了,但我很肯定这是你应该分开模板的预期方式。此外,在您的视图中,指定
template_name
选项时,您需要具有应用名称:PS.同样的原理也适用于静态文件夹。