[英]# replacing url template tag in django
在我的主页上,我有我的导航栏,在我的导航栏中,我有一个关于页面的链接,并在一个 href 中使用模板 url 标签,看起来像这样
<a href="{% url 'about' %}" class="nav-link">About</a>
但是当我运行我的项目并在预览 window 中查看它时,它不起作用。 单击 # 键时,url 中应出现“/about”。 当我使用谷歌开发工具查看元素 # 在 href 而不是模板 url 标记内,当我在谷歌开发工具中编辑 html 并将其更改为“/about/”时,链接有效并带我到 about页面,我不知道为什么会这样
这是我的 /about/urls.py 中的代码
from django.urls import path
from . import views
urlpatterns = [
path('', views.about, name='about'),
]
这是我 /about/views.py 中的代码
from django.shortcuts import render
from django.http import HttpResponse
def about(request):
return render(request, 'about/about.html')
非常感谢任何帮助,并提前感谢您
您的主页位于与 urls.py 不同的应用程序中,其中定义了您需要的 url。 您在主应用程序的 urls.py 中组合所有不同的 url 路径: SeanKellyQuarry/SeanKellyQuarry/urls.py
。 在这里,您应该为每个名称分配一个命名空间,以便 Django 可以毫不含糊地知道您所指的 url 是什么:
urlpatterns = [
path('', include('home.urls')),
path('admin/', admin.site.urls),
path('about/', include('about.urls'), namespace="about"), # <==
] + static(settings.MEDIA_URL, document_root=settings.MEDIA_ROOT)
此时,要在 about.urls 中引用任何名为 url 的名称,您需要添加命名空间。 所以如果 about.urls 看起来像:
urlpatterns = [
path('', views.about, name='about'),
]
然后在模板中你需要使用:
<a href="{% url 'about.about' %}" class="nav-link">About</a>
第一个about
对应于您在主 urls.py 中定义的命名空间,第二个匹配包含的 urls.py 中 url 的名称。
但是,请注意,通过为每个页面使用一个应用程序(因此一个 urls.py,一个views.py ...)会引入很多开销和不必要的复杂性,特别是对于(大概)将是 static 的页面,不需要模型或复杂的视图。
我建议将您的主要 static 内容保留在一个应用程序中,并且只为更大的复杂功能单元制作单独的内容(例如,将所有与“博客”相关的功能、页面、模型、url 和所有内容分组在其自己的应用程序中,与 static 页面分开,然后是另一个用于“待办事项列表”功能的单独应用程序...)。
您必须在/about/urls.py
中设置app_name
:
from django.urls import path
from . import views
app_name = "about"
urlpatterns = [
path('', views.about, name='about'),
]
在模板中使用app_name:urlname
:
<a href="{% url 'about:about' %}" class="nav-link">About</a>
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.