亚洲乱码中文字幕综合,中国熟女仑乱hd,亚洲精品乱拍国产一区二区三区,一本大道卡一卡二卡三乱码全集资源,又粗又黄又硬又爽的免费视频

Django路由Path方法的使用詳解

 更新時(shí)間:2025年05月14日 11:27:06   作者:沉觴流年  
這篇文章主要介紹了Django路由Path方法的使用,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教

Django路由Path方法

在Django視圖與路由中簡(jiǎn)要提及了Path方法的使用

路由的分發(fā)

當(dāng)前所有路由的配置,都是寫(xiě)在DjangoSite項(xiàng)目目錄下的urls.py文件中

from django.urls import path
from demo import views  as demo_view   # 導(dǎo)入demo應(yīng)用中的視圖
from sgin import views as sgin_view    # 導(dǎo)入sgin應(yīng)用中的視圖

urlpatterns = [
    path('admin/', admin.site.urls),
    path('index/',demo_view.index),
    
    path('events/',sgin_view.event),
    path('events/detail/',sgin_view.event_detail),
]

在實(shí)際開(kāi)發(fā)過(guò)程中,一個(gè)Django 項(xiàng)目會(huì)包含很多的 應(yīng)用app ,會(huì)有很多的視圖函數(shù)和對(duì)應(yīng)的路由配置,這時(shí)候如果都只在主路由里進(jìn)行配置就會(huì)顯得雜亂無(wú)章。

所以,在實(shí)際開(kāi)發(fā)過(guò)程中,通常會(huì)在每個(gè) app 里,創(chuàng)建各自的 urls.py 路由模塊,然后從根路由出發(fā),將 app 所屬的 url 請(qǐng)求,全部轉(zhuǎn)發(fā)到相應(yīng)的 urls.py 模塊中。

這個(gè)從主路由轉(zhuǎn)發(fā)到各個(gè)應(yīng)用路由的過(guò)程叫做路由的分發(fā),實(shí)現(xiàn)是通過(guò)使用 include() 函數(shù)來(lái)完成的。

admin/index/是屬于demo應(yīng)用的路由,events/events/detail/是屬于sgin應(yīng)用的路由,

在sgin應(yīng)用下新增urls.py文件,導(dǎo)入path模塊,導(dǎo)入sgin應(yīng)用下的視圖,然后將DjangoSite項(xiàng)目目錄下urls.py文件中屬于sgin應(yīng)用的路由配置復(fù)制過(guò)來(lái)

from django.urls import path
from sgin import views as sgin_view

# 子路由列表
urlpatterns = [
    path('events/',sgin_view.event),
    path('events/detail/',sgin_view.event_detail),
]

此時(shí),如果在瀏覽器中輸入http://127.0.0.1:8000/events/是訪問(wèn)不了頁(yè)面的,因?yàn)樽勇酚珊椭髀酚蛇€沒(méi)有建立關(guān)系,需要在DjangoSite項(xiàng)目目錄下的urls.py文件中使用 include() 函數(shù)來(lái)建立關(guān)系

from django.urls import path,include   # 導(dǎo)入include
from demo import views  as demo_view   
from sgin import urls  as sgin_urls   # 導(dǎo)入sgin應(yīng)用中的子路由模塊

urlpatterns = [
    path('admin/', admin.site.urls),
    path('index/',demo_view.index),
    
    path('',include(sgin_urls)),
    # path('sgin/',include(sgin_urls)),
]

此時(shí),再去訪問(wèn)http://127.0.0.1:8000/events/,頁(yè)面就可以正常訪問(wèn)了。

既然/events/路由是屬于 sgin應(yīng)用,也可以改成path('sgin/',include(sgin_urls)),這樣,訪問(wèn)頁(yè)面的路徑就變成了http://127.0.0.1:8000/sgin/events/,這樣就更加層次分明。

路由的匹配規(guī)則

通過(guò)ORM與數(shù)據(jù)庫(kù)進(jìn)行交互,將交流會(huì)的數(shù)據(jù)展示到前端,這一步驟已經(jīng)完成,那么,如何通過(guò)點(diǎn)擊交流會(huì),進(jìn)入對(duì)應(yīng)的交流會(huì)詳情頁(yè)面呢?

不同的詳情頁(yè),其對(duì)應(yīng)的url,必定也是不同的,數(shù)據(jù)庫(kù)中交流會(huì)的id,可以作為其唯一標(biāo)識(shí)。例如:

http://127.0.0.1:8000/sgin/events/detail/1	測(cè)試開(kāi)發(fā)交流會(huì)詳情頁(yè)
http://127.0.0.1:8000/sgin/events/detail/2	功能測(cè)試交流會(huì)詳情頁(yè)

通過(guò)訪問(wèn)對(duì)應(yīng)的url,進(jìn)入對(duì)應(yīng)的詳情頁(yè)

所以當(dāng)前端傳遞對(duì)應(yīng)的路由時(shí),路由文件要匹配得到對(duì)應(yīng)的規(guī)則,這里就需要對(duì)sgin應(yīng)用目錄下的url.py文件進(jìn)行修改。前端傳遞的參數(shù) 1、2、3、4 這些會(huì)動(dòng)態(tài)變化的數(shù),用變量detail_id進(jìn)行接收,且聲明其屬性為整型

  • url.py
from django.urls import path
from sgin import views as sgin_view

# 子路由列表
urlpatterns = [
    path('events/',sgin_view.event),
    path('events/detail/<int:detail_id>',sgin_view.event_detail),	# 路由需要匹配一個(gè)整型的id
]

視圖函數(shù)文件里,也需要同步進(jìn)行修改。對(duì)sgin應(yīng)用目錄下的views.py文件進(jìn)行修改,接收這個(gè)detail_id,然后根據(jù) id 去查詢數(shù)據(jù)庫(kù)中的數(shù)據(jù),獲取唯一的一個(gè)數(shù)據(jù)對(duì)象,最后將eventdetail返回給前端模板文件

  • views.py
from django.shortcuts import render
from django.http import HttpResponse
from sgin.models import Event       


def event(request):
    eventlist = Event.objects.all()     
    return render(request,'events.html',{'event_list':eventlist})

def event_detail(request,detail_id):    # 將detail_id傳遞進(jìn)來(lái)
    eventdetail = Event.objects.get(id=detail_id)       # 根據(jù)id去數(shù)據(jù)庫(kù)中查詢對(duì)應(yīng)的數(shù)據(jù)
    return render(request,'event_detail.html',{'event_detail':eventdetail})

為了防止detail_id 在數(shù)據(jù)庫(kù)中不存在造成報(bào)錯(cuò),這里查詢這一步操作需要用到錯(cuò)誤處理機(jī)制,可以將數(shù)據(jù)置空,或者返回一個(gè)404頁(yè)面

  • 404.html
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>404 Not Found</title>
</head>
<body>
<h1>您查找的數(shù)據(jù)不存在</h1>
</body>
</html>
  • views.py
from django.shortcuts import render
from django.http import HttpResponse
from sgin.models import Event       


def event(request):
    eventlist = Event.objects.all()     
    return render(request,'events.html',{'event_list':eventlist})

def event_detail(request,detail_id):    # 將detail_id傳遞進(jìn)來(lái)

    try:
        eventdetail = Event.objects.get(id=detail_id)       # 根據(jù)id去數(shù)據(jù)庫(kù)中查詢對(duì)應(yīng)的數(shù)據(jù)
    except:
        # eventdetail = '' # 置空數(shù)據(jù)
        return render(request, '404.html')

    return render(request,'event_detail.html',{'event_detail':eventdetail})

后端這里的邏輯處理就完成了,接下來(lái)就是,前端通過(guò)點(diǎn)擊交流會(huì),需要有不同的url,根據(jù)這個(gè)url進(jìn)入對(duì)應(yīng)的交流會(huì)詳情頁(yè)面,這里需要對(duì)event.html文件進(jìn)行修改,將a鏈接 這塊由原來(lái)的<a href="/sgin/events/detail"> {{ event }}</a> 變?yōu)?<a href="/sgin/events/detail/{event.id}"> {{ event }}</a>

  • event.html
{% extends "base.html" %}

{% block title %}
    測(cè)試資料分類
{% endblock %}

{% block content %}
     <ul class="list-group">
            {% for event in event_list %}
                <li class="list-group-item text-center" >
                <!---對(duì)分類鏈接的url進(jìn)行修改--->
                   <a href="/sgin/events/detail/{{event.id}}" rel="external nofollow" > {{ event }}</a>
                </li>
            {% endfor %}
     </ul>
{% endblock %}

最后,詳情頁(yè)內(nèi)容的展示,也需要修改一下,展示測(cè)試交流會(huì)主題、開(kāi)始時(shí)間和地址等相應(yīng)信息

  • event_detail.html
{% extends "base.html" %}

{% block title %}
    測(cè)試交流會(huì)詳情頁(yè)
{% endblock %}

{% block content %}
    <div class="panel panel-info">
        <div class="panel-heading">
            交流會(huì)詳情頁(yè)
        </div>
        <div class="panel-body">
            <p>測(cè)試交流會(huì)主題:{{ event_detail.name }}</p>
            <p>開(kāi)始時(shí)間:{{ event_detail.start_time }}</p>
            <p>地址:{{ event_detail.address }}</p>
            <span><a href="/sgin/events/" rel="external nofollow"  class="btn btn-info">返回測(cè)試資料分類頁(yè)</a></span>
        </div>
    </div>
{% endblock %}

啟動(dòng)項(xiàng)目,點(diǎn)擊不同的分類,就可以進(jìn)入不同的詳情頁(yè)了

path方法類型轉(zhuǎn)化器

Django 默認(rèn)支持 5 個(gè)類型轉(zhuǎn)換器,在大多數(shù)情況下,絕對(duì)可以滿足我們的正常業(yè)務(wù)需求,如果不能,Django 同樣提供了自定義轉(zhuǎn)換器。

下面介紹 Django 默認(rèn)支持的轉(zhuǎn)換器,如下所示:

  • str:匹配除了路徑分隔符/之外的非空字符串,這是默認(rèn)的形式;
  • int:匹配正整數(shù),包含0;
  • slug:匹配字母、數(shù)字以及橫杠、下劃線組成的字符串;
  • uuid:匹配格式化的 uuid,如 075194d3-6885-417e-a8a8-6c931e272f00;
  • path:匹配任何非空字符串,包含路徑分隔符/。

總結(jié)

以上為個(gè)人經(jīng)驗(yàn),希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。

相關(guān)文章

  • 舉例講解Python中的身份運(yùn)算符的使用方法

    舉例講解Python中的身份運(yùn)算符的使用方法

    這篇文章主要介紹了舉例講解Python中的身份運(yùn)算符的使用方法,是Python入門(mén)學(xué)習(xí)中的基礎(chǔ)知識(shí),需要的朋友可以參考下
    2015-10-10
  • Python魔術(shù)方法專題

    Python魔術(shù)方法專題

    這篇文章主要介紹了Python魔術(shù)方法的的相關(guān)資料,文章講解非常細(xì)致,代碼幫助大家更好的理解和學(xué)習(xí),感興趣的朋友可以了解下
    2020-06-06
  • PyTorch+LSTM實(shí)現(xiàn)單變量時(shí)間序列預(yù)測(cè)

    PyTorch+LSTM實(shí)現(xiàn)單變量時(shí)間序列預(yù)測(cè)

    時(shí)間序列是指在一段時(shí)間內(nèi)發(fā)生的任何可量化的度量或事件。這篇文章主要為大家介紹了PyTorch+LSTM實(shí)現(xiàn)單變量時(shí)間序列預(yù)測(cè)的相關(guān)資料,需要的可以參考一下
    2023-02-02
  • Python光學(xué)仿真理解Jones矩陣學(xué)習(xí)

    Python光學(xué)仿真理解Jones矩陣學(xué)習(xí)

    這篇文章主要為大家介紹了Python光學(xué)仿真理解Jones矩陣的學(xué)習(xí),有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步早日升職加薪
    2021-10-10
  • Python 2.x如何設(shè)置命令執(zhí)行的超時(shí)時(shí)間實(shí)例

    Python 2.x如何設(shè)置命令執(zhí)行的超時(shí)時(shí)間實(shí)例

    這篇文章主要給大家介紹了關(guān)于Python 2.x如何設(shè)置命令執(zhí)行超時(shí)時(shí)間的相關(guān)資料,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考借鑒,下面來(lái)一起看看吧。
    2017-10-10
  • python print()函數(shù)的end參數(shù)和sep參數(shù)的用法說(shuō)明

    python print()函數(shù)的end參數(shù)和sep參數(shù)的用法說(shuō)明

    這篇文章主要介紹了python print()函數(shù)的end參數(shù)和sep參數(shù)的用法說(shuō)明,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2021-05-05
  • Python queue隊(duì)列原理與應(yīng)用案例分析

    Python queue隊(duì)列原理與應(yīng)用案例分析

    這篇文章主要介紹了Python queue隊(duì)列原理與應(yīng)用,結(jié)合具體案例形式分析了Python queue隊(duì)列的原理、功能、實(shí)現(xiàn)方法與使用技巧,需要的朋友可以參考下
    2019-09-09
  • 基于python 微信小程序之獲取已存在模板消息列表

    基于python 微信小程序之獲取已存在模板消息列表

    這篇文章主要介紹了基于python 微信小程序之獲取已存在模板消息列表的相關(guān)知識(shí),本文通過(guò)實(shí)例代碼給大家介紹的非常詳細(xì),具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2019-08-08
  • Python?Pygame實(shí)戰(zhàn)之打磚塊游戲的實(shí)現(xiàn)

    Python?Pygame實(shí)戰(zhàn)之打磚塊游戲的實(shí)現(xiàn)

    這篇文章主要介紹了如何利用Python實(shí)現(xiàn)經(jīng)典的游戲—打磚塊。玩家操作一根螢?zāi)簧纤降摹鞍糇印?,讓一顆不斷彈來(lái)彈去的“球”在撞擊作為過(guò)關(guān)目標(biāo)消去的“磚塊”的途中不會(huì)落到螢?zāi)坏紫隆8信d趣的小伙伴可以了解一下
    2022-03-03
  • Django自定義用戶表+自定義admin后臺(tái)中的字段實(shí)例

    Django自定義用戶表+自定義admin后臺(tái)中的字段實(shí)例

    今天小編就為大家分享一篇Django自定義用戶表+自定義admin后臺(tái)中的字段實(shí)例,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧
    2019-11-11

最新評(píng)論