如何将额外的参数传递给视图函数作为Django中的url?

时间:2011-06-29 02:36:36

标签: django

我有一些数据我想使用render_to_response函数传递给html模板。所以我一般都会这样做:

return render_to_response('template.html', {'arg1':arg1,'arg2': arg2}, context_instance=RequestContext(request))

但是,我想创建一个指向此页面的链接,而不是直接转到它。参数是用于生成图形的数据列表,不像年份,数字或单个单词,所以我不希望它们显示在名称模式的URL中,如下所示:

urlpatterns = patterns('',
    url(r'^archive/(\d{4})/$', archive
)  

有没有办法可以将额外的参数传递给views函数并生成url链接而不在url中显示额外的参数?

我已经知道你可以传递像这样的额外参数

urlpatterns = patterns('blog.views',
    (r'^blog/(?P<year>\d{4})/$', 'year_archive', {'foo': 'bar'}),
)

但这不是我想要的,因为我不希望硬编码的参数 - 它们不保持不变并且是由其他代码生成的数据。

要点: 如何创建一个执行render_to_response的链接,但只有在单击它之后?

1 个答案:

答案 0 :(得分:0)

两个选项:

  1. 如果您不希望URL中有任何数据,您可以发送POST请求并使用request.POST访问它,请参阅the relevant docs. POST请求的缺点是浏览器会发出警告你刷新页面,很难链接到。

  2. 更好的方法是创建一个包含所需数据的模型。

  3. 例如:

    class Data(models.Model):
        data1 = models.IntegerField()
        data2 = models.IntegerField()
        data3 = models.IntegerField()
    

    然后有一个视图从POST请求中获取所有数据,并生成一个看起来像/dataview/1的URL。这样您就可以使用一个URL来获取Data模型中的数据,但不会在URL中编码数据。