也许这是一个非常愚蠢的问题,但我是使用django的新手。
我有一个django模板,其中包含一组可以选择的属性。在上传的文件中,我必须根据所选属性执行不同的处理,因此我想将所选属性值从模板传递给视图。属性在view.py中进行了硬编码,并通过getJSON在模板中检索:
<script type="text/javascript">
$(function() {
$.getJSON('available_properties', function(data) {
var options = [];
for(var i in data.properties)
{
var prop = data.properties[i];
options.push('<option value="'+prop+'">'+prop+'</option>');
}
$("#properties > select").html(options.join(''));
});
});
</script>
然后上传文件表单会触发操作:
<form onsubmit="return checkfile();" prop="return get_prop();" action="calculate/<property_value_goes_here>" enctype="multipart/form-data" method="POST">
{% csrf_token %}
<input type="file" id="uploadfile" name="uploadfile" size="30">
<input type="submit" id="calculate" value="Calculate!">
</form>
如何直接在必须在提交表单上调用的URL路径中传递属性值?
答案 0 :(得分:1)
实际上你有两种方法可以解决这个问题。一个是解析url,另一个是将特性作为请求参数传递。
第一个可以像这样实现:
urlpatterns = patterns('',
(r'^/(?P<property>\*)/$', 'appname.viewname'),
)
在您的网址中,并且:
def your_view(request,property):
#your view stuff here
在你的应用的views.py中。这在django教程的第3部分中有记录,您可以在此处找到它:http://docs.djangoproject.com/en/1.2/intro/tutorial03/
但是对于你的问题,第二种解决方案可能更好。你可以创建一个标准的url-querystring(正如你的帖子建议你知道如何使用js来做到这一点),如下所示:
/upload/?property=value&someotherproperty=othervalue
并获取传递的值如下:
def your_view(request):
property = request.POST.get('property',None)
someotherproperty = request.POST.get('someotherproperty',None)
获取的工作原理如下:
request.POST.get(PROPERTY_NAME,fallback_value)
要将查询字符串放入request.POST,您必须像这样配置urls.py:
urlpatters = patterns('',
(r'^upload/$','appname.viewname'),
)
这样,/ upload /之后的所有内容都将传递给request.POST