繁体   English   中英

# 替换 django 中的 url 模板标签

[英]# 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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM