最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

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)文章

  • Keras搭建分類網(wǎng)絡(luò)平臺VGG16?MobileNet?ResNet50

    Keras搭建分類網(wǎng)絡(luò)平臺VGG16?MobileNet?ResNet50

    這篇文章主要為大家介紹了Keras搭建分類網(wǎng)絡(luò)平臺VGG16?MobileNet?ResNet50,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪
    2022-05-05
  • python編碼總結(jié)(編碼類型、格式、轉(zhuǎn)碼)

    python編碼總結(jié)(編碼類型、格式、轉(zhuǎn)碼)

    這篇文章主要介紹了python編碼操作,包括編碼類型、格式、轉(zhuǎn)碼等,并結(jié)合實例分析了相關(guān)操作技巧與注意事項,需要的朋友可以參考下
    2016-07-07
  • Python文件讀寫操作詳解

    Python文件讀寫操作詳解

    在?Python?中,文件操作非常常見,可以通過內(nèi)建的?open()?函數(shù)進行文件的讀取、寫入、創(chuàng)建等操作,理解文件操作的模式和?with?語句對于確保代碼的簡潔性和效率至關(guān)重要,本文給大家從基礎(chǔ)到實戰(zhàn)詳細介紹了Python文件的讀寫操作,需要的朋友可以參考下
    2025-06-06
  • python matplotlib庫繪制散點圖例題解析

    python matplotlib庫繪制散點圖例題解析

    這篇文章主要介紹了python matplotlib庫繪制散點圖例題解析,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友可以參考下
    2019-08-08
  • Python如何實現(xiàn)同時進行多個瀏覽器注入

    Python如何實現(xiàn)同時進行多個瀏覽器注入

    瀏覽器注入是一種技術(shù),允許我們在運行中的瀏覽器進程中注入代碼,以便執(zhí)行特定的任務(wù),下面我們就來看看Python如何實現(xiàn)同時進行多個瀏覽器注入吧
    2025-03-03
  • python3利用pathlib替代os.path的方法實例

    python3利用pathlib替代os.path的方法實例

    os.path 模塊始終是適合Python運行的操作系統(tǒng)的路徑模塊,因此可用于本地路徑,下面這篇文章主要給大家介紹了關(guān)于python3利用pathlib替代os.path的相關(guān)資料,需要的朋友可以參考下
    2022-04-04
  • python中l(wèi)eastsq函數(shù)的使用方法

    python中l(wèi)eastsq函數(shù)的使用方法

    這篇文章主要介紹了python中l(wèi)eastsq函數(shù)的使用方法,leastsq作用是最小化一組方程的平方和,下面文章舉例說明詳細內(nèi)容,具有一的參考價值,需要的小伙伴可以參考一下
    2022-03-03
  • pycharm激活碼2020最新分享適用pycharm2020最新版親測可用

    pycharm激活碼2020最新分享適用pycharm2020最新版親測可用

    這篇文章主要介紹了pycharm激活碼2020最新分享適用pycharm2020最新版親測可用,同時也支持Intellij IDEA激活碼,PHPStorm激活碼大家可以放心使用需要的朋友可以參考下
    2020-11-11
  • PyCharm最新激活碼(2020/10/27全網(wǎng)最新)

    PyCharm最新激活碼(2020/10/27全網(wǎng)最新)

    Pycharm最新激活碼全網(wǎng)最新(2020/10/27更新),適用Intellij idea 2020.2.x,WebStorm 2020.2.x,Pycharm 2020.2.x
    2020-10-10
  • Python實現(xiàn)簡易過濾刪除數(shù)字的方法小結(jié)

    Python實現(xiàn)簡易過濾刪除數(shù)字的方法小結(jié)

    這篇文章主要介紹了Python實現(xiàn)簡易過濾刪除數(shù)字的方法,結(jié)合實例形式總結(jié)分析了Python基于正則及內(nèi)置函數(shù)過濾刪除數(shù)字的相關(guān)操作技巧,需要的朋友可以參考下
    2019-01-01

最新評論

泽库县| 武冈市| 平昌县| 西乌珠穆沁旗| 方山县| 大宁县| 安康市| 吴堡县| 凤阳县| 山阴县| 东乌| 栾川县| 穆棱市| 平定县| 通江县| 毕节市| 宝坻区| 高州市| 文水县| 桦甸市| 自贡市| 佳木斯市| 江津市| 彩票| 巴里| 木里| 通化市| 枣强县| 清流县| 七台河市| 东宁县| 高雄县| 方正县| 汝阳县| 绥中县| 会昌县| 浦县| 屯昌县| 水城县| 宜君县| 浑源县|