2013-03-01 22 views
2

作爲一個Django首發,我有一個小問題來處理:通過kwargs爲反向查看; Django的1.5

的html代碼:

<li><a href="{% url 'dyn_display' category='first'%}">first</a></li> 
<li><a href="{% url 'dyn_display' category='second'%}">second</a></li> 
<li><a href="{% url 'dyn_display' category='third'%}">third</a></li> 

urlconf.py

url(r'(?P<category>[a-z]+)$', 'display', name='dyn_display') 

view.py

def courses_display(request, category): 
    return render_to_response('display/basic.html', {category: 'in'}, context_instance=RequestContext(request)) 

最後是basic.html的一部分,所以你可以想一想爲什麼我需要c ategory可變

basic.html

<div class="accordion" id="accordion2"> 
    <div class="accordion-group"> 
     <div class="accordion-heading"> 
      <a class="accordion-toggle" data-toggle="collapse" data-parent="#accordion2" href="#collapseFirst"> 
       <strong>First</strong> 
      </a> 
     </div> 
     <div id="collapseFirst" class="accordion-body collapse {{ first }}"> 
      <div class="accordion-inner"> 
       ... 
      </div> 
     </div> 
    </div> 
    <div class="accordion-group"> 
     <div class="accordion-heading"> 
      <a class="accordion-toggle" data-toggle="collapse" data-parent="#accordion2" href="#collapseSecond"> 
       <strong>Second</strong> 
      </a> 
     </div> 
     <div id="collapseSecond" class="accordion-body collapse {{ second }}"> 
      <div class="accordion-inner"> 
       ... 
      </div> 
     </div> 
    </div> 
    <div class="accordion-group"> 
     <div class="accordion-heading"> 
      <a class="accordion-toggle" data-toggle="collapse" data-parent="#accordion2" href="#collapseThird"> 
       <strong>Third</strong> 
      </a> 
     </div> 
     <div id="collapseThird" class="accordion-body collapse {{ third }}"> 
      <div class="accordion-inner"> 
       ... 
      </div> 
     </div> 
     </div> 
    </div> 

由於整個頁面與引導和jQuery做,URL的最後部分

一些/ URL/第一

一些/ URL/

some/url/第三

是一種醜陋的,因爲手風琴元素讓我崩潰,並打開相應的內部機構無需重新加載頁面。所以問題是:是否有一種方法可以反向傳遞kwarg,這將在視圖中使用,而不是在reverse()中確定url?

我得到url的方式,如some/url/,仍然從第一個.html頁面傳遞kwarg到視圖?

回答

7

您可以使用此:

如果這是你的網址:

url(r'(?P<category>[a-z]+)$', 'display', name='dyn_display') 
reverse('dyn_display', kwargs={'category': 'first'}) 

要重定向您可以在視圖中使用這樣的:

from django.http import HttpResponseRedirect 
return HttpResponseRedirect(reverse('dyn_display', kwargs={'category': 'first'})) 

如果這是您的網址:

url(r'$', 'display', name='dyn_dysplay') 
reverse('dyn_display') 

要重定向您可以在視圖中使用這樣的:

from django.http import HttpResponseRedirect 
return HttpResponseRedirect(reverse('dyn_display')) 

就在於可以得到一個可選值的視圖則需要2個網址:

url(r'$', 'display', name='dyn_optional_display')  
url(r'(?P<category>[a-z]+)$', 'display', name='dyn_display') 

然後你的觀點:

def courses_display(request, category=None): 
    ctx = {} 
    if category: 
     ctx.update({category: 'in'}) 
    return render_to_response('display/basic.html', ctx, context_instance=RequestContext(request)) 
+0

是不是反向函數是一個python代碼類似於我在模板中使用url標記?你的方法,如果我理解正確的話,會尋找一個url匹配,其中有一個'category'組被捕獲,所以它不能在簡單的url上運行(r'$','display',name =' dyn_dysplay')。另外,我應該把python代碼放在​​哪裏,因爲我要從模板中選擇一些具有特定選項的頁面?我可以看到的唯一的其他選項是重定向,但也應該涉及反向,我仍然認爲我不能使用它將**傳遞給**視圖**,而不是在urlpatterns中查找匹配。 – 2013-03-01 08:53:09

+0

我更新了我的答案 – Charl 2013-03-01 08:59:28

+0

是的,我明白了。感謝您如此快速的迴應。但是,請原諒我,我仍然有一些麻煩給我找出來。你所有的方法都能正常工作,但在前兩種情況下,我仍然會得到**醜陋的**網址** some/url/first **,但我會將所需的變量傳遞給視圖以打開適當的容器。其餘的方法確實給了我一個不錯的網址** some/url/**,但我無法將所需的參數傳遞給視圖,我從urlpatterns調用,以便展開相應的容器。 – 2013-03-01 09:05:30