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