簡體   English   中英

導航欄中的 Django 上下文變量 - 正確的 href 分配?

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

不起作用(參見href1Link1

<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 代碼{

選項1:在視圖中解析url

您可以在視圖中使用 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>

選項 2:在模板中解析 url

或者你 go 與第一個例子,其中{% url 'blog %}將由模板渲染引擎解釋和執行:

context_navigation =   {
       'Link1'    : 'Blog'
}

底座.html

<a class="nav-item nav-link text-light"  href="{% url 'blog' %}">{{Link1}}</a>

選項3:視圖通過url(名稱)和模板解決它(未測試)

如果您需要動態生成上下文但想要解析模板中的實際 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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM