2017-06-29 39 views
-1

在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}) 

模板傳遞參數的URL在Django

 <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模式

url(r'^(?P<login_status>[0,1])/$',views.login_page,name='login_page') 

另一個URL直接映射,但 'login_page' 需要怎樣的說法我可以通過我的views.py的參數傳遞給模板,以便'login_page'映射? 還是有什麼辦法呢? 基本上,我創建了一個導航欄基本模板,併爲每個頁面傳遞了名稱和鏈接到模板,以便可以通過將參數傳遞給{%include'模板名稱在我的所有頁面中使用相同的導航欄'with my_list = my_list%},這是個好主意嗎?

回答

1

您可以添加一個if語句並將參數傳遞給url標記,具體取決於它是否存在。

{% if url_arg %}{% url j url_arg %}{% else %}{% url j %} 

但是,這種方法是醜陋的,只要你有一個帶有兩個參數的URL模式就會中斷。

我會建議逆轉的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 %}

模板會更可讀
+0

感謝您的幫助 –

+0

這種做法導航欄好嗎? –

+0

Thanx無論如何幫助 –