通过URL将变量从template.html传递到views.py(使用文件输入表单)

时间:2011-03-08 11:09:26

标签: django django-templates django-urls

也许这是一个非常愚蠢的问题,但我是使用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路径中传递属性值?

1 个答案:

答案 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