Передача переменной из template.html в views.py по URL (с использованием формы ввода файла) - PullRequest
0 голосов
/ 08 марта 2011

Может быть, это очень глупый вопрос, но я новичок в использовании 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 Ответ

1 голос
/ 08 марта 2011

На самом деле у вас есть два способа решить эту проблему.Один анализирует URL, другой передает свойства в качестве параметров запроса.

Первый может быть реализован следующим образом:

urlpatterns = patterns('',
    (r'^/(?P<property>\*)/$', 'appname.viewname'),
)  

в вашем URL и:

def your_view(request,property):
    #your view stuff here 

в views.py вашего приложения.Это описано в части 3 учебника по django, как вы можете найти здесь: http://docs.djangoproject.com/en/1.2/intro/tutorial03/

Но для вашей проблемы, вероятно, лучше второе решение.Вы можете создать стандартную строку url-query (поскольку ваше сообщение предполагает, что вы знаете, как использовать js для этого), например:

/upload/?property=value&someotherproperty=othervalue  

и получить переданные значения следующим образом:

def your_view(request):
    property = request.POST.get('property',None)
    someotherproperty = request.POST.get('someotherproperty',None)  

где get работает как:
request.POST.get (property_name, fallback_value)

Чтобы поместить строку запроса в request.POST, вы должны настроить свой urls.py следующим образом:

urlpatters = patterns('',
    (r'^upload/$','appname.viewname'),
)  

Таким образом, все после / upload / будет передано на запрос .POST

...