2016-12-27 37 views
0

我有我通过几个Django的意见日期过滤器:通行证打通Django的参数渲染()快捷

views.py

def event_list(request): 
    date_query = request.GET.get("date", str(default_event_date())) 
    d = datetime.strptime(date_query, "%Y-%m-%d").date() 
    # do stuff... 

    return render(request, "events/event_list.html", context) 

但我想发扬通过render()获取参数。

我找到了this answer如何使用reverse()来做到这一点,但render()没有直接使用url。

我怀疑我需要重新添加到传递的request,但我不知道如何做到这一点。

+0

你是什么意思“弘扬通过渲染()” ??? –

+0

我的意思是,我渲染后,我想要的网址有'?日期= 2016-12-30'末 – 43Tesseracts

+0

你能不能也请粘贴urls.py文件的相关部分的片段? – 2ps

回答

1

我想你是误会render。的render生活中的工作是由HTML模板和语境词典返回与content to the userHttpResponse

结合给定的语境词典 给定的模板,并返回与该呈现的文本HttpResponse对象。

相反,redirect将用户重定向到一个新的URL(即,这样GET参数可以被包括在内)。因此,如果您使用render,则必须手动保存您的GET参数。当然,你可以通过做一些像加date用户的会话避免这种情况:

from datetime import date, datetime 

date_query = request.session.get('date') 
if not date_query: 
    date_query = request.GET.get("date", default_event_date()) 
    if not isinstance(date_query, date): 
     date_query = datetime.strptime(date_query, "%Y-%m-%d").date() 
    request.session['date'] = date_query 

d = date_query 

,这将让你“发扬”您的GET参数以后路由和看法。

+0

如何手动保存'GET'参数?对措辞不佳的道歉,但这就是我的意思。 – 43Tesseracts

+0

对于这个特定的渲染,GET参数不应该改变。他们应该只在页面上从渲染页面转到下一页。因此,保留GET参数意味着格式化查询字符串(使用'request.GET.urlencode')并将其附加到您希望使用'date'参数的每个URL。 – 2ps

+0

感谢会议的建议。无论如何,我认为这可能是更好的解决方案。我会尝试一下。 – 43Tesseracts