将参数传递给django中的url

时间:2017-06-29 13:00:04

标签: python django

在views.py 中

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%},这是一个好主意吗?

1 个答案:

答案 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 %}

,模板会更具可读性