[英]Django context variable in the navigation bar - correct href assignment?
導航欄中上下文變量的正確分配是什么? 我的 Django 示例是:
在view.py中:
from django.shortcuts import render
from django.http import HttpResponse
context_navigation = {
'Link1' : 'Blog',
'href1' : "{% url 'blog' %}", }
def index(request):
return render(request, 'app_about/index.html', context=context_navigation)
在urls.py中:
from django.urls import path
from . import views
urlpatterns = [
path('blog/', views.index, name='blog'),
]
在templates/base.html這確實有效
<a class="nav-item nav-link text-light" href="{% url 'blog' %}" > {{Link1}}</a>
這不起作用(參見href1
和Link1
)
<a class="nav-item nav-link text-light" href="{{href1}}" > {{Link1}}</a>
在最后一種情況下,會生成錯誤的 url,例如http://127.0.0.1:8000/blog/%7B%
。 將href
作為上下文變量href1
的正確分配是什么? 謝謝你的一些提示!
在第二個示例中,您插入了一個變量href1
,它在呈現時被內容(字符串) {% url 'blog %}
。 Django 嘗試渲染此字符串(使其 html 安全,這就是%7B
.. 的來源,這只是 html 代碼{
您可以在視圖中使用 python 解析 url 並將實際的 url 作為字符串傳遞給模板:
視圖.py
from django.urls import reverse
context_navigation = {
'Link1' : 'Blog',
'href1' : reverse('blog')
}
底座.html
<a class="nav-item nav-link text-light" href="{{href1}}">{{Link1}}</a>
或者你 go 與第一個例子,其中{% url 'blog %}
將由模板渲染引擎解釋和執行:
context_navigation = {
'Link1' : 'Blog'
}
底座.html
<a class="nav-item nav-link text-light" href="{% url 'blog' %}">{{Link1}}</a>
如果您需要動態生成上下文但想要解析模板中的實際 url,您可以將 url 名稱作為變量傳遞,例如:
context_navigation = {
'Link1': 'Blog',
'url1': 'blog',
}
底座.html
<a class="nav-item nav-link text-light" href="{% url url1 %}">{{Link1}}</a>
但我不確定您是否可以在這樣的模板標簽中使用變量(只是猜測,從未以這種方式使用過)
謝謝@sarbot 的回答。 讓我們談談我與他們相處的經歷。
選項 1看起來很精簡,並且符合 django 手冊,所以我更喜歡它作為解決方案。 不幸的是,我不得不為 runserver 不喜歡這種方法並產生致命的 Python 錯誤而苦苦掙扎。 暫時我對此沒有任何解釋。
選項 2是我開始使用的選項,它有效。 對於干凈的編程風格,我不喜歡繼續使用它。
選項 3 對我有用,所以我不必多說謝謝:-)
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.