django-示例(url傳遞參數)


url傳遞參數有兩種,一個是通過普通分組方式,一個是通過帶命名分組方式

1.傳遞方式

  1)普通分組方式,傳遞參數順序是嚴格的。如下例子   

    url(r'^detail-(\d+)-(\d+).html',views.detail), 共傳遞了兩個參數  

              def detail(request,nid,uid)第一個(\d+)傳遞給了nid,第二個(\d+)傳遞uid,

   但是如果變為detail(request,uid,nid),則第一個(\d+)傳遞給了uid,所以可能會存在傳遞錯誤問題

 2) 帶命名分組
  url(r'^detail-(?P<nid>\d+)-(?P<uid>\d+).html', views.detail) 第一個參數一直是傳遞給nid,第二個參數一直傳遞給uid,
  所以在視圖中不管nid,uid順序如何,都能傳遞正確。
  推薦使用帶命名分組。
 3)傳遞的參數很多怎么辦?可以用如下方式
  def detail(request, *args,**kwargs):
復制代碼
            a. 
                url(r'^detail-(\d+)-(\d+).html', views.detail),
                
                def func(request, nid, uid):
                    
                    pass
            
                def func(request, *args):
                    args = (2,9)
                    
                    
                def func(request, *args, **kwargs):
                    args = (2,9)
       
            b. 
                url(r'^detail-(?P<nid>\d+)-(?P<uid>\d+).html', views.detail)
                
                def func(request, nid, uid):
                    pass
                    
                def funct(request, **kwargs):
                    kwargs = {'nid': 1, 'uid': 3}
                    
                def func(request, *args, **kwargs):
                    args = (2,9)
    4、 name
復制代碼

2)渲染頁面是動態和靜態頁面

  通常我們認為帶?參數頁面為動態的。比如:http://127.0.0.1:8001/detail/?id=3

  動態頁面對搜索爬蟲不太友好。百度等靜態頁面更容易收錄。可以改靜態傳遞值http://127.0.0.1:8001/detail-3(這里就需要使用命名分組)

  

復制代碼
            {% for row in USER_DICT.values %} <!-- 這里返回的是values-->
        <li><a href="/detail/?id={{ row }}">{{ row }}</a></li>
        {% endfor %}
                {% for k,v in USER_DICT.items %} <!-- 這里返回的是key,values-->
        <li><a href="/detail-{{ k }}.html">{{ v.name }}</a></li>
        {% endfor %}
    </ul>
復制代碼

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM