导航栏中的 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>
这个不起作用(参见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
.. 的来源,它只是 {
.[=21= 的 html 代码]
选项 1:在视图中解析 url
您可以在视图中使用 python 解析 url 并将实际的 url 作为字符串传递给模板:
views.py
from django.urls import reverse
context_navigation = {
'Link1' : 'Blog',
'href1' : reverse('blog')
}
base.html
<a class="nav-item nav-link text-light" href="{{href1}}">{{Link1}}</a>
选项 2:在模板中解析 url
或者您使用第一个示例,其中 {% url 'blog %}
将由模板渲染引擎解释和执行:
context_navigation = {
'Link1' : 'Blog'
}
base.html
<a class="nav-item nav-link text-light" href="{% url 'blog' %}">{{Link1}}</a>
选项 3:视图传递 url(名称),模板解析它(未测试)
如果您需要动态生成上下文但想要解析模板中的实际 urls,您可以将 url 名称作为变量传递,例如:
context_navigation = {
'Link1': 'Blog',
'url1': 'blog',
}
base.html
<a class="nav-item nav-link text-light" href="{% url url1 %}">{{Link1}}</a>
但我不确定你是否可以像这样在模板标签中使用变量(只是猜测,从未这样使用过)
谢谢@sarbot 的回答!说说我的经历吧。
选项 1 看起来很精简并且符合 django 手册,所以我更喜欢它作为解决方案。不幸的是,我不得不与 runserver 不喜欢这种方法并生成致命的 Python 错误这一事实作斗争。暂时我没有解释。
选项 2 是我开始使用的选项,它有效。对于干净的编程风格,我宁愿不要坚持使用它。
选项 3 适合我,所以我不用多说谢谢 :-)
导航栏中上下文变量的正确分配是什么?我的 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
.. 的来源,它只是 {
.[=21= 的 html 代码]
选项 1:在视图中解析 url
您可以在视图中使用 python 解析 url 并将实际的 url 作为字符串传递给模板:
views.py
from django.urls import reverse
context_navigation = {
'Link1' : 'Blog',
'href1' : reverse('blog')
}
base.html
<a class="nav-item nav-link text-light" href="{{href1}}">{{Link1}}</a>
选项 2:在模板中解析 url
或者您使用第一个示例,其中 {% url 'blog %}
将由模板渲染引擎解释和执行:
context_navigation = {
'Link1' : 'Blog'
}
base.html
<a class="nav-item nav-link text-light" href="{% url 'blog' %}">{{Link1}}</a>
选项 3:视图传递 url(名称),模板解析它(未测试)
如果您需要动态生成上下文但想要解析模板中的实际 urls,您可以将 url 名称作为变量传递,例如:
context_navigation = {
'Link1': 'Blog',
'url1': 'blog',
}
base.html
<a class="nav-item nav-link text-light" href="{% url url1 %}">{{Link1}}</a>
但我不确定你是否可以像这样在模板标签中使用变量(只是猜测,从未这样使用过)
谢谢@sarbot 的回答!说说我的经历吧。
选项 1 看起来很精简并且符合 django 手册,所以我更喜欢它作为解决方案。不幸的是,我不得不与 runserver 不喜欢这种方法并生成致命的 Python 错误这一事实作斗争。暂时我没有解释。
选项 2 是我开始使用的选项,它有效。对于干净的编程风格,我宁愿不要坚持使用它。
选项 3 适合我,所以我不用多说谢谢 :-)