Не удается передать параметры URL-адресу Django - PullRequest
1 голос
/ 05 августа 2020

Я пытаюсь получить фиктивный вызов недостающих страниц в проекте, чтобы я мог отслеживать, что пропало. Простая страница «В разработке» с названием недостающей ссылки. Вместо того, чтобы помещать настоящую ссылку, я помещаю ее в вызывающий html, vacia. html:

<li><a href="{% url 'incid:xtodo' pagref='aquisalto' %}"> PuntoDeSalto </a></li>

URL-адрес декодируется в URL-адресах следующим образом:

href="{% url 'incid:xtodo' pagref=aquisalto %} "

Необходимо go для incid / xtodo с параметром «aquisalto» Это код xtodo:

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>En construcción</title>
</head>
<h1 align="left">EN CONSTRUCCIÓN</h1>

<h1>
   <h1>{{pagref}}</h1>
<div>
    <img src="http://{{ request.META.HTTP_HOST }}/static/logos/Under_construction_icon-orange.svg.png" width="300"
         height="250" alt="UnderConstruction"/>
</div>
</body>
</html>

И это представление xtodo:

def xtodo_view(request):  # para pruebas, quitar
    global pagref
    if request.method == 'GET':
        pagref = request.GET.get('pagref', 'g')
    elif request.method == 'POST':
        pagref = request.POST.get('pagref', 'p')
    return render(request, 'incid/xtodo.html', {'pagref': pagref})

Я не могу найти способ заставить форму работать, и она должна быть такой простой. Я использую DJANGO 3 и Python 3. Я пробовал другие формы вызова, например:

href="{% url 'incid:xtodo'?pagref='aquisalto' %}"  
or
href="{% url 'incid:xtodo'%}?pagref='aquisalto'"

с и без? И с и без 'или ».

Определенно я упустил из виду кое-что важное. Я не могу заставить такую ​​простую вещь работать, чтобы todo show со значением pagref в нем. Ошибка, которую я получаю с текущей кодировкой: TypeError at / incid / xtodo /

xtodo_view () получил неожиданный аргумент ключевого слова 'pagref'

Я буду признателен любая помощь.

1 Ответ

0 голосов
/ 05 августа 2020

Неправильный способ передачи параметров.

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

1. Использование path параметров

views.py

def xtodo_view(request, my_param):  # para pruebas, quitar
    # here my_param will have anything you pass
    return render(request, 'incid/xtodo.html', {'pagref': my_param})

вызов этого представления в url

href="{% url 'incid:xtodo' 'g' %}"
href="{% url 'incid:xtodo' 'p' %}"

В первом случае в вашем представлении вы получите my_param как 'g', а во втором случае вы получите my_param как 'p'.


2. Использование query параметров

Когда вы передаете параметры запроса с URL-адреса, например www.abc.xyz?q1=val1&q2=val2. Вы можете получить эти параметры запроса q1 и q2, используя request.GET.get(q1) и request.GET.get(q2).

views.py

def xtodo_view(request):  # para pruebas, quitar
    pageref = ""
    if request.method == 'GET':
        pagref = request.GET.get('pagref', 'g')
    elif request.method == 'POST':
        pagref = request.GET.get('pagref', 'p')

    return render(request, 'incid/xtodo.html', {'pagref': pagref})

вызов этого представления в url

href="{% url 'incid:xtodo'}?pagref=abc"  
href="{% url 'incid:xtodo'%}?pagref=xyz"

В первом случае использование request.GET.get('pageref', 'p') даст 'abc', а во втором - 'xyz'.

...