def parts_home(request):
part_list_= models.part_list.objects.all()
gly_name = ['glyphicon glyphicon-plus', 'glyphicon glyphicon-log-out']
link_list = ['parts:part_add', 'main:login_page']
link_name = ['Add Part', 'Log Out']
my_list = zip(gly_name, link_list, link_name)
return render(request,'parts.html',{'part_list':part_list_,'my_list':my_list})
模板中的
<ul class="nav navbar-nav navbar-right">
{% for i,j,k in my_list %}
<li class="nav-item"><a href="{% url j %}" class="nav-link"><span class="{{ i }}"></span>{{k}} </a> </li>
{% endfor %}
</ul>
网址格式
url(r'^(?P<login_status>[0,1])/$',views.login_page,name='login_page')
另一个直接映射的网址,但是&#39; login_page&#39;需要参数如何通过我的views.py将参数传递给模板,以便&#39; login_page&#39;被映射? 或者有什么办法吗? 基本上,我已经创建了一个导航栏基本模板,我为每个页面传递了名称和链接到模板,这样我就可以通过将参数传递给{%include&#39;来在我的所有页面中使用相同的导航栏。模板名称&#39;使用my_list = my_list%},这是一个好主意吗?
答案 0 :(得分:1)
您可以添加if语句并将参数传递给url标记,具体取决于它是否存在。
{% if url_arg %}{% url j url_arg %}{% else %}{% url j %}
然而,这种方法很难看,只要你有一个带有两个参数的URL模式就会中断。
我建议在视图中而不是模板中反转网址:
from django.core.urlresolvers import reverse
def parts_home(request):
gly_name = ['glyphicon glyphicon-plus', 'glyphicon glyphicon-log-out']
link_list = [reverse('parts:part_add'), reverse('main:login_page', args=[login_status])]
link_name = ['Add Part', 'Log Out']
然后将模板更改为:
{% for i,j,k in my_list %}
<li class="nav-item"><a href="{{ j }}" class="nav-link"><span class="{{ i }}"></span>{{k}} </a> </li>
{% endfor %}
请注意,如果您使用{% for class,url,text in my_list %}