Передача параметров URL в Python

#javascript #python #django #url

#javascript #python #django #url

Вопрос:

У меня есть следующий код в одном из моих шаблонов.

 <html>
<body>
    <script>
        var val1 = 10;
        var val2 = 20;
    </script>
    <a href="/generate/">Generate</a>
</body>
</html>
  

Я хочу использовать значения val1 и val2 в generate функции в views.py файл. Это было бы что-то вроде этого.

 def generate(request):
    # do something with val1 and val2
  

Я не понимаю, как я могу передать эти значения функции. Какова наилучшая практика для этого, должен ли я попытаться получить информацию через параметры URL? Или, возможно, мне следует просто удалить Javascript и делать все на Python непосредственно в generate() функции?

Спасибо за вашу помощь!

Ответ №1:

Вам необходимо применить HTTP-методы, такие как GET или POST.

используйте этот код в шаблоне просмотра (пример — index.html ):

 <html>
<body>
    <form method="post" action="/generate">
        {% csrf_token %}
        <input type="number" name="val1" value="10">
        <input type="number" name="val2" value="20">
        <input type="submit" value="generate">
    </form>
</body>
</html>
  

и использовать этот код в views.py :

 def index(request):
    return render_to_response('index.html', RequestContext(request))

def generate(request):
    val1 = request.POST.get('val1', 0)
    val2 = request.POST.get('val2', 0)
    sum = val1   val2

    return HttpResponse(str(sum))
  

Эта ссылка полезна для вас: https://docs.djangoproject.com/en/dev/topics/forms /

Ответ №2:

Передайте параметры с помощью GET:

 <html>
    <body>
        <a href="/generate/?val1=10amp;val2=20">Generate</a>
    </body>
</html>
  

Теперь вы можете получить к ним доступ в режиме просмотра, используя атрибут запроса:

 def generate(request):
    if request.method == 'GET':
        val1 = request.GET.get('val1')
        val2 = request.GET.get('val2')
        #futher code
  

https://docs.djangoproject.com/en/dev/ref/request-response/#

Комментарии:

1. Я использовал это, поскольку это кажется проще и чище, чем использование формы. Спасибо!