Сделайте кнопку, которая приведет вас к случайной следующей странице - PullRequest
0 голосов
/ 16 мая 2018

Итак, я пытаюсь создать приложение для викторины с Django. До сих пор у меня есть SQL база данных, которая может автоматически заполнять шаблон с учетом идентификатора вопроса. Если я пойду к http://localhost:8000/polls/2/, то у меня появится второй вопрос викторины.

Я пытаюсь создать кнопку, которая при нажатии приводит меня к случайному вопросу теста.

Внутри у меня есть следующие методы:

# myproject/polls/view.py

def get_question_page(request, question_id):
    try:
        question = Question.objects.get(id=question_id)
    except Exception as e:
        question = None
    context = {'question': question}
    return render(request, 'index.html', context)

def get_random_page(request):
    n = Question.objects.count()
    rand = random.randint(1, n)
    return get_question_page(request, rand)

И следующие URL:

# myproject/polls/urls.py

from django.conf.urls import url

from . import views

urlpatterns = [
    url(r'^$', views.index, name='index'),
    url(r'^(?P<question_id>[0-9]+)/$', views.get_question_page, name='question'),
    url(r'^rand/$', views.get_random_page, name='rand'),
    url(r'^(?P<question_id>[0-9]+)/select/$', views.select, name='select'),
]

Я попытался использовать следующий код внутри myproject/polls/index.html:

<!-- myproject/polls/index.html -->

<form action="{% url 'views.get_random_page' %}" method="POST">
    <input id="submit"a type="button" value="Click" />
</form>

Но я получаю только:

NoReverseMatch at /polls/2/
Reverse for 'views.get_random_page' not found.
'views.get_random_page' is not a valid view function or pattern name.`

Может кто-нибудь объяснить, что идет не так и как это исправить?

Ответы [ 2 ]

0 голосов
/ 16 мая 2018

Добавьте имя_приложения в ваш urls.py

app_name = 'your_app_name'

urlpatterns = [
url(r'^$', views.index, name='index'),
url(r'^(?P<question_id>[0-9]+)/$', views.get_question_page, name='question'),
url(r'^rand/$', views.get_random_page, name='rand'),
url(r'^(?P<question_id>[0-9]+)/select/$', views.select, name='select'),
]

Добавьте URL-адрес в следующем формате и измените тип ввода для отправки, чтобы отправить форму.

<form action="{% url 'your_app_name:rand' %}" method="POST">
    <input id="submit" type="submit" value="Click" />
</form>
0 голосов
/ 16 мая 2018

То, что возвращает это представление get_random_page(), неверно, у вас должно быть redirect('url_name'), которое возвращает HttpResponseRedirect на соответствующий URL для переданных аргументов или непосредственно с HttpResponseRedirect('url_path')

вместо этого:

return get_question_page(request, rand)

попробовать:

return redirect(get_question_page,question_id=rand)
# without quotes means, you call directly the function
# so the function should be above in order for python to find it.

return redirect("get_question_page",question_id=rand)
# With quotes, you actually call the url_name
# this is better, when you have to call views from other apps
...