我有一些数据我想使用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的链接,但只有在单击它之后?
答案 0 :(得分:0)
两个选项:
如果您不希望URL中有任何数据,您可以发送POST请求并使用request.POST
访问它,请参阅the relevant docs. POST请求的缺点是浏览器会发出警告你刷新页面,很难链接到。
更好的方法是创建一个包含所需数据的模型。
例如:
class Data(models.Model):
data1 = models.IntegerField()
data2 = models.IntegerField()
data3 = models.IntegerField()
然后有一个视图从POST请求中获取所有数据,并生成一个看起来像/dataview/1
的URL。这样您就可以使用一个URL来获取Data
模型中的数据,但不会在URL中编码数据。