簡體   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