Django учебник, как отправить несколько аргументов? - PullRequest
0 голосов
/ 07 мая 2020

Я знаю, что что-то подобное уже спрашивали раньше, но я никогда не видел ответа, который был бы мне понятен или который работал бы. Но я новичок в Django, так что, возможно, я мог его пропустить. Но на мой вопрос должен быть простой ответ. Я следую руководству для Django, и в разделе 4 они используют httpresponseredirect для go на следующую страницу после публикации формы.

return HttpResponseRedirect(reverse('polls:results', args=(question.id,)))

Функция страницы просмотров выглядит так:

def detail(request, question_id):

Мой вопрос: как я могу передать функции дополнительные параметры?

Я пробовал это сейчас:

 urls.py
 path('<int:question_id>/result/<int:qid>/<str:aa>/', views.result, name='result'),


 views.py
 return HttpResponseRedirect(reverse('bsapp:result', kwargs = dict(qid = question.id, xx = aa)))

 The function
def result(request, qid, xx):

Дает это: django .urls.exceptions.NoReverseMatch: Обратный для 'результата' с аргументами ключевого слова '{' qid ': 3,' xx ':' 6 '}' не найден. Пробовали 1 шаблон (ы): ['bsapp / (? P [0-9] +) / result / (? P [0-9] +) / (? P [^ /] +) / $']

Ответы [ 3 ]

0 голосов
/ 07 мая 2020

Вы можете добавить столько параметров, сколько захотите, просто убедитесь, что ваш URL принимает параметр.

Пример:

urls.py

path('detail/<int:first_arg>/<int:second_arg>/', views.section, name='article-section'),

просмотров. ру

def detail(request, first_arg, second_arg):
0 голосов
/ 07 мая 2020

Это то, что мне пришлось сделать:

 xx="EXTRA ARGUMENT"
 return HttpResponseRedirect(reverse('bsapp:result', args=(question.id, xx,)))

 path('<int:question_id>/<str:xx>/result/', views.result, name='result'),  


 def result(request, question_id, xx): 

Спасибо за вашу помощь, я очень ценю это.

0 голосов
/ 07 мая 2020

Вы используете kwargs, а не args, где kwargs - это словарь, в котором ключи соответствуют параметрам в диспетчере URL - https://docs.djangoproject.com/en/3.0/topics/http/urls/#example

from django.urls import path

from . import views

urlpatterns = [
    path('blog/', views.page),
    path('blog/<slug:slug>/page/<int:num>/', views.slug_page, name="slug_page"),
    path('blog/page<int:num>/', views.page),
]

# View (in blog/views.py)
def slug_page(request, slug, num=1):
    # Do stuff here

    return redirect(reverse("slug_page", kwargs=dict(slug="example", num=2))
    ...
...