我正在使用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>
问题是,当我进入/进入时,我收到以下错误:
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可以正常工作。
最简洁的方法是什么?我可以通过一个网址和视图实现这一目标吗?
祝你好运
让 - 诺尔
#根据建议,我修改了一下视图:
def get(self, request, year=None, month=None):
if year is None:
year = datetime.datetime.today().year
if month is None:
month = datetime.datetime.today().month
context = {'current_date': datetime.datetime.now(),
'year': year,
'month': month,
}
网址保持不变:
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>
这似乎有效;当点击模板中的链接时,我被发送到默认值;但如果我在网址中指定了一个值,我就会被发送到正确的值。
我的最后一个问题是:我不能在一个视图和网址中这样做吗?基本上,当使用/ entry时,参数将设置为None,而在指定它们时,它们会在视图中被接收。
非常感谢
让 - 诺尔
答案 0 :(得分:1)
您传递的属性没有任何值作为默认值。你应该这样做:
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>
答案 1 :(得分:0)
您的网址模板标记应该获取关键字参数而不仅仅是args
<li><a href="{% url 'entry' year=year month=month%}">Entry</a></li>
答案 2 :(得分:0)
好的,首先要做的事情。你的整个逻辑不是清洁或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):
现在,在您的视图中检查您的参数是否具有值无,
if (year is None) and (month is None) :
# set today values
mplah mplah mplah .....
希望你明白这一点......