簡體   English   中英

在Django 1.9中使用網址

[英]Using urls in Django 1.9

我正在將Django 1.9.7與Python 3.5.1結合使用

我對Django很陌生,構建了一個簡單的應用程序。 我目前對網址有疑問。

我希望具有以下行為:如果用戶訪問http:... / entry / 2016/03,他會看到2016年3月的數據,但是如果用戶訪問t:http:... / entry,則不是得到404,他應該重定向到http:... / entry / 2016/06(假設我們在2016年6月)。

目前,這是我的操作方法:

url(r'^entry/$', Entry.as_view(), name='entry0'),
url(r'^entry/(?P<year>\d{4})/(?P<month>\d{1,2})/$', Entry.as_view(), name='entry'),

該視圖定義為:

def get(self, request, year=datetime.datetime.year, month=datetime.datetime.month):

在模板中,我有:

<li><a href="{% url 'entry' year month%}">Entry</a></li> 

問題是當我進入/ entry時,出現以下錯誤:

NoReverseMatch at /entry/

Reverse for 'entry' with arguments '(<attribute 'year' of 'datetime.date' objects>, <attribute 'month' of 'datetime.date' objects>)' and keyword arguments '{}' not found. 1 pattern(s) tried: ['entry/(?P<year>\\d{4})/(?P<month>\\d{1,2})/$']

但是,進入/ entry / 2016/06可以正常工作。

使此工作最干凈的方法是什么? 我可以使用單個網址和視圖來實現嗎?

最好的祝福

讓·諾埃爾

如建議的那樣,我對視圖進行了一些修改:

url(r'^entry/$', Entry.as_view(), name='entry0'),
url(r'^entry/(?P<year>\d{4})/(?P<month>\d{1,2})/$', Entry.as_view(), name='entry'),

網址保持不變:

<li><a href="{% url 'entry0' %}">Entry</a></li> 

模板僅指向空網址:

 <li><a href="{% url 'entry0' %}">Entry</a></li> 

這似乎可行; 單擊模板中的鏈接時,我會收到默認值; 但是,如果我在網址中指定一個值,則會發送給正確的值。

我的最后一個問題是:我不能在單個視圖和URL中做到這一點嗎? 基本上,使用/ entry時,參數將設置為“無”,而指定它們時,它們將在視圖中接收。

非常感謝

讓·諾埃爾

您傳遞的屬性沒有默認值。 您應該這樣做:

from datetime import datetime as dt

def get(self, request, year=None, month=None):
    if year is None:
        year = dt.today().year
    if month is None:
        month = dt.today().month

要在模板中使用它,請執行以下操作:

<li><a href="{% url 'entry0' %}">Entry</a></li> 

您的url模板標記應獲取關鍵字args而不是args

<li><a href="{% url 'entry' year=year month=month%}">Entry</a></li> 

好,首先 您的整個邏輯不是干凈的或Pythonic的。 您需要1個網址,1個視圖和1個模板

url(r'^entry/(?P<year>\d{4})/(?P<month>\d{1,2})/$', Entry.as_view(),name='entry')

定義你的看法

def get(self, request, year=None, month=None):

現在,在視圖內部檢查參數是否具有值None,

if (year is None) and (month is None) :
# set today values

mplah mplah mplah .....希望您能明白這一點。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM