繁体   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