欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

Django路由Path方法的使用詳解

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

Django路由Path方法

在Django視圖與路由中簡要提及了Path方法的使用

路由的分發(fā)

當前所有路由的配置,都是寫在DjangoSite項目目錄下的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),
]

在實際開發(fā)過程中,一個Django 項目會包含很多的 應(yīng)用app ,會有很多的視圖函數(shù)和對應(yīng)的路由配置,這時候如果都只在主路由里進行配置就會顯得雜亂無章。

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

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

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項目目錄下urls.py文件中屬于sgin應(yīng)用的路由配置復(fù)制過來

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),
]

此時,如果在瀏覽器中輸入http://127.0.0.1:8000/events/是訪問不了頁面的,因為子路由和主路由還沒有建立關(guān)系,需要在DjangoSite項目目錄下的urls.py文件中使用 include() 函數(shù)來建立關(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)),
]

此時,再去訪問http://127.0.0.1:8000/events/,頁面就可以正常訪問了。

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

路由的匹配規(guī)則

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

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

http://127.0.0.1:8000/sgin/events/detail/1	測試開發(fā)交流會詳情頁
http://127.0.0.1:8000/sgin/events/detail/2	功能測試交流會詳情頁

通過訪問對應(yīng)的url,進入對應(yīng)的詳情頁

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

  • 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),	# 路由需要匹配一個整型的id
]

視圖函數(shù)文件里,也需要同步進行修改。對sgin應(yīng)用目錄下的views.py文件進行修改,接收這個detail_id,然后根據(jù) id 去查詢數(shù)據(jù)庫中的數(shù)據(jù),獲取唯一的一個數(shù)據(jù)對象,最后將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傳遞進來
    eventdetail = Event.objects.get(id=detail_id)       # 根據(jù)id去數(shù)據(jù)庫中查詢對應(yīng)的數(shù)據(jù)
    return render(request,'event_detail.html',{'event_detail':eventdetail})

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

  • 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傳遞進來

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

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

后端這里的邏輯處理就完成了,接下來就是,前端通過點擊交流會,需要有不同的url,根據(jù)這個url進入對應(yīng)的交流會詳情頁面,這里需要對event.html文件進行修改,將a鏈接 這塊由原來的<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 %}
    測試資料分類
{% endblock %}

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

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

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

{% block title %}
    測試交流會詳情頁
{% endblock %}

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

啟動項目,點擊不同的分類,就可以進入不同的詳情頁了

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

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

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

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

總結(jié)

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

相關(guān)文章

  • 舉例講解Python中的身份運算符的使用方法

    舉例講解Python中的身份運算符的使用方法

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

    Python魔術(shù)方法專題

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

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

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

    Python光學仿真理解Jones矩陣學習

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

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

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

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

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

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

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

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

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

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

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

    Django自定義用戶表+自定義admin后臺中的字段實例

    今天小編就為大家分享一篇Django自定義用戶表+自定義admin后臺中的字段實例,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2019-11-11

最新評論