python - 导航栏中的 Django 上下文变量 - 正确的 href 分配?
问题描述
导航栏中上下文变量的正确分配是什么?我的 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'),
]
在模板/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
.. 的来源,这只是{
.
选项 1:在视图中解析 url
您可以在视图中使用 python 解析 url,并将实际的 url 作为字符串传递给模板:
视图.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(名称)和模板解析它(未测试)
如果您需要动态生成上下文但想要解析模板中的实际 url,您可以将 url 名称作为变量传递,例如:
context_navigation = {
'Link1': 'Blog',
'url1': 'blog',
}
base.html
<a class="nav-item nav-link text-light" href="{% url url1 %}">{{Link1}}</a>
但我不确定您是否可以在这样的模板标签中使用变量(只是猜测,从未以这种方式使用过)
推荐阅读
- php - 如何在常规 PHP/HTML 页面和 Angular 页面之间共享 PHP 会话?
- python - 熊猫拆分列表列
- excel - 这个 VBA 语句可以写成一行吗?
- eiffel - 埃菲尔:比较类型的最佳方法,而不用发出嘘声
- go-cd - 我可以在 gocd-server 页面上检查代理的健康状况吗?
- java - 如何在加载类的字节码之前对其进行操作?
- python-3.x - 使用 Selenium 定位具有变化数字的动态 li 元素
- c# - 方法'mysql_native_password'失败并显示消息:用户''@'RAHUL-PC'的访问被拒绝(使用密码:是)
- heroku - Heroku 在尝试构建应用程序时似乎保留了某种缓存
- javascript - 设置状态不适用于反应组件中的多个 api 获取