[英]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.