真实的国产乱ⅩXXX66竹夫人,五月香六月婷婷激情综合,亚洲日本VA一区二区三区,亚洲精品一区二区三区麻豆

成都創(chuàng)新互聯(lián)網(wǎng)站制作重慶分公司

使用Django怎么傳遞URL參數(shù)-創(chuàng)新互聯(lián)

本篇文章為大家展示了使用Django怎么傳遞URL參數(shù),內(nèi)容簡(jiǎn)明扼要并且容易理解,絕對(duì)能使你眼前一亮,通過(guò)這篇文章的詳細(xì)介紹希望你能有所收獲。

創(chuàng)新互聯(lián)堅(jiān)持“要么做到,要么別承諾”的工作理念,服務(wù)領(lǐng)域包括:成都網(wǎng)站設(shè)計(jì)、成都網(wǎng)站建設(shè)、企業(yè)官網(wǎng)、英文網(wǎng)站、手機(jī)端網(wǎng)站、網(wǎng)站推廣等服務(wù),滿足客戶于互聯(lián)網(wǎng)時(shí)代的和平網(wǎng)站設(shè)計(jì)、移動(dòng)媒體設(shè)計(jì)的需求,幫助企業(yè)找到有效的互聯(lián)網(wǎng)解決方案。努力成為您成熟可靠的網(wǎng)絡(luò)建設(shè)合作伙伴!

1. Django處理請(qǐng)求的方式

1) Django通過(guò)URLconf模塊來(lái)進(jìn)行判斷。通常情況下,這就是ROOT_URLCONF配置的價(jià)值,但是如果請(qǐng)求攜帶了一個(gè)urlconf的屬性(通常被中間件設(shè)置),那么這個(gè)被攜帶的urlconf將會(huì)替代ROOT_URLCONF的配置。

2) Django會(huì)調(diào)用Python模塊并尋找各種urlpatterns。這是一個(gè)屬于django.conf.urls.url()實(shí)例的python列表。

3) Django會(huì)遍歷每個(gè)URL pattern,自上而下,并且選取收割匹配請(qǐng)求URL的pattern。

4) 一旦匹配某個(gè)url pattern的正則表達(dá)式,Django將導(dǎo)入并調(diào)用相關(guān)的view(這是一個(gè)簡(jiǎn)單的python函數(shù),或者是一個(gè)class-based view)

這個(gè)view將會(huì)傳遞下列參數(shù):

  • 一個(gè)HttpRequest的實(shí)例

  • 如果匹配了URL中一個(gè)no named group,那么參數(shù)將會(huì)按根據(jù)URL中的位置一一對(duì)應(yīng)

  • 如果匹配了URL中一個(gè)named group,且參數(shù)傳遞是通過(guò)named group來(lái)匹配的,那么參數(shù)將會(huì)被指定的kwargs代替。

5)  如果沒有任何一個(gè)正則表達(dá)式被匹配,那么Django會(huì)拋出異常,并報(bào)錯(cuò)。

2.URL中的named  group

URL可以通過(guò)named group方式傳遞指定參數(shù),語(yǔ)法為: (?Ppattern), name 可以理解為所要傳遞的參數(shù)的名稱,pattern代表所要匹配的模式。例如,

url(r'^articles/(?P[0-9]{4})/(?P[0-9]{2})/$', views.month_archive),

那么year,month將會(huì)對(duì)應(yīng)views傳遞過(guò)來(lái)的year,month的值,而后面緊跟的則代表正則表達(dá)匹配的模式。

3. URL的反向解析

通常來(lái)說(shuō)在處理完一個(gè)表單之后,網(wǎng)頁(yè)會(huì)發(fā)生跳轉(zhuǎn)。通常寫URL我們都避免硬編碼,這樣不方便后期的調(diào)整。通常我們需要從URL獲取兩種內(nèi)容,最主要是view能夠通過(guò)URL獲取一些標(biāo)識(shí)并處理,另一些信息則是傳遞過(guò)來(lái)的參數(shù)。
Django提供了一種解決方案,URL mapper是與URL設(shè)計(jì)一一對(duì)應(yīng)。你可以通過(guò)URLconf來(lái)實(shí)現(xiàn),并反向使用它。例如,

  1. 由用戶通過(guò)瀏覽器發(fā)起URL請(qǐng)求,調(diào)用view,并將URL中的參數(shù)傳遞給view

  2. 通過(guò)view并附上相應(yīng)參數(shù),找到相應(yīng)匹配的URL。

后者我們稱之為對(duì)URLs的反向解析。反向解析的例子,

url(r'^articles/([0-9]{4})/$', views.year_archive, name='news-year-archive'),

Django在不同的層次也提供了一些工具來(lái)實(shí)現(xiàn)URL的反向解析。

  1. 在template中:使用url標(biāo)簽

  2. 在python中:使用django.core.urlresolvers.reverse()函數(shù)

  3. 在更高層次處理model實(shí)例時(shí),可以使用get_absolute_url()方法

4. 利用URL來(lái)完成Device,Line表的增加功能

對(duì)于信息系統(tǒng),我們可以把Node,Device, Line都看成是一種資源,對(duì)其中任何一種要素的修改,都是對(duì)資源的修改,只是會(huì)落實(shí)到不同的表中,但是在程序中可以一樣看到?,F(xiàn)在,我們就基于上一節(jié)的代碼做些修改。

1)修改URL的配置,將原來(lái)的add對(duì)應(yīng)的url進(jìn)行擴(kuò)充

urls.py:

from django.conf.urls import url
from django.contrib import admin
import echo.views
 
urlpatterns = [
  url(r'^admin/', admin.site.urls),
  #內(nèi)容顯示,并通過(guò)定義name,來(lái)進(jìn)行反向解析
  url(r'^lists/(?P\w+)/$', echo.views.lists, name='lists'),
  #增加內(nèi)容
  url(r'^add/(?P
\w+)/$', echo.views.add, name='add'), ]

2) 修改views的函數(shù)的參數(shù),在request后加入table,使該函數(shù)能夠用于所有表格。request是views函數(shù)中必須要有的參數(shù)。

views.py:

# -*- coding: UTF-8 -*-
from .models import Node,Line,Device
from forms import NodeForm,LineForm,DeviceForm
from django.shortcuts import render, redirect
# Create your views here.
 
def lists(request, table):
  #從根據(jù)不同的請(qǐng)求,來(lái)獲取相應(yīng)的數(shù)據(jù),并跳轉(zhuǎn)至相應(yīng)頁(yè)面
  if table == 'node':
    data = Node.objects.all()
    list_template = 'node_list.html'
  if table == 'line':
    data = Line.objects.all()
    list_template = 'line_list.html'
  if table == 'device':
    data = Device.objects.all()
    list_template = 'device_list.html'
  #建立context字典,將值傳遞到相應(yīng)頁(yè)面
  context = {
    'data': data,
  }
  #跳轉(zhuǎn)到相應(yīng)頁(yè)面,并將值傳遞過(guò)去
  return render(request,list_template,context)
 
def add(request, table):
 
  #根據(jù)提交的請(qǐng)求不同,獲取來(lái)自不同F(xiàn)orm的表單數(shù)據(jù)
  if table == 'node':
    form = NodeForm(request.POST or None)
  if table == 'line':
    form = LineForm(request.POST or None)
  if table == 'device':
    form = DeviceForm(request.POST or None)
  #判斷form是否有效
  if form.is_valid():
    #創(chuàng)建實(shí)例,需要做些數(shù)據(jù)處理,暫不做保存
    instance = form.save(commit=False)
    #將登錄用戶作為登記人
    if table == 'node':
      instance.node_signer = request.user
    if table == 'line':
      instance.line_signer = request.user
    if table == 'device':
      instance.device_signer = request.user
    #保存該實(shí)例
    instance.save()
    #跳轉(zhuǎn)至列表頁(yè)面,配合table參數(shù),進(jìn)行URL的反向解析
    return redirect('lists', table=table)
 
  #創(chuàng)建context來(lái)集中處理需要傳遞到頁(yè)面的數(shù)據(jù)
  context = {
    'form': form,
  }
  #如果沒有有效提交,則仍留在原來(lái)頁(yè)面
  return render(request, 'add.html', context)

3)在template中建立相關(guān)頁(yè)面:

add.html:




  
  


 {% csrf_token %}
    {{ form }}
    
 
 

device_list.html:




  
  


  
                            {% for item in data %}                                     {% endfor %}   
設(shè)備名稱設(shè)備型號(hào)
{{ item.device_caption }}{{ item.device_type }}

line_list.html:




  
  


  
    
      
      
      
    
    {% for item in data %}
      
        
        
        
      
    {% endfor %}
  
線路名稱線路速率線路類型
{{ item.line_code }}{{ item.line_speed }}{{ item.line_type }}

node_list.html:




  
  


  
    
      
      
      
    
    {% for item in data %}
      
        
        
        
      
    {% endfor %}
  
節(jié)點(diǎn)名稱節(jié)點(diǎn)地址節(jié)點(diǎn)類型
{{ item.node_name }}{{ item.node_address }}{{ item.node_type }}

上述內(nèi)容就是使用Django怎么傳遞URL參數(shù),你們學(xué)到知識(shí)或技能了嗎?如果還想學(xué)到更多技能或者豐富自己的知識(shí)儲(chǔ)備,歡迎關(guān)注創(chuàng)新互聯(lián)行業(yè)資訊頻道。


當(dāng)前名稱:使用Django怎么傳遞URL參數(shù)-創(chuàng)新互聯(lián)
本文來(lái)源:http://weahome.cn/article/csjgii.html

其他資訊

在線咨詢

微信咨詢

電話咨詢

028-86922220(工作日)

18980820575(7×24)

提交需求

返回頂部