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

Я попытался удалить жестко закодированный URL, как показано в руководстве по Django на сайте фреймворка, но это не устраняет ошибку.

Вот выдержка из urls.py:

urlpatterns = [
    url(r'^$', views.index, name="index"),
    path('movie=<int:movie_id>&user=<int:user_id>/', views.movie, name='movie'),
    path('ratings/', views.ratings, name='movie'),
    path('rating/<int:movie_id>/', views.rating, name='movie'),
    path('movie=<int:movie_id>&user=<int:user_id>/vote/', views.vote, name='vote'),
    path('register/',views.register, name='register'),
]

Это мой просмотр фильма (предполагается, что он предоставит фильм и радио-рейтинг для пользователя, чтобы оценить фильм), где URL создается и передается в HTML:

def movie(request,movie_id,user_id):
    movie = get_object_or_404(Movie, pk=movie_id)
    voteURL = '/polls/movie=' + str(movie_id) + '&user='+str(user_id)+'/vote/'
    context = {
        'mymoviecaption':movie.Title,
        'moviePoster': 'https://image.tmdb.org/t/p/original'+tmdb.Movies(movie.TMDBID).images().get('posters')[0].get('file_path'),
        'myrange': range(10,0,-1),
        'myuserid':user_id,
        'voteurl': voteURL,
        'mymovieid':movie_id
    }
    #print(nextURL)
    translation.activate('en')
    return HttpResponse(render(request, 'movieview.html', context=context))

Отрывок HTML, где вызывается представление голосования:

<form action="{% url voteurl %}" method="post">

    {% for i in myrange %}
        <input id="star-{{i}}" type="radio" name="rating" value={{i}}>
            <label for="star-{{i}}" title="{{i}} stars">
                <i class="active fa fa-star" aria-hidden="true"></i>
            </label>
    {% endfor %}
    <input type="submit">Vote!</input>
</form>

Вид голосования (следует сохранить в базе данных и перенаправить на следующий фильм, пока не сохраняет в базу данных, потому что я не хотел загромождать его записями, пока не буду уверен, что функция заработала):

def vote(request, movie_id,user_id):
    try:
        nextmovie=get_object_or_404(Movie, pk=movie_id+1)
        nextURL = '/polls/movie=' + str(movie_id + 1) + '&user='+str(user_id)+'/'
    except Http404:
        nextURL = '/polls/ratings'
    try:
        myrating = int(request.POST['rating'])
        print(myrating)
    except:
        # Redisplay the question voting form.
        return render(request, '/polls/movie=' + str(movie_id + 1) + '&user='+str(user_id)+'/', {
            'error_message': "You didn't select a choice.",
        })
    return HttpResponseRedirect(nextURL)

Независимо от того, что я пытаюсь, я получаю NoReverseMatch по адресу / polls / movie = 1 & user = 9 / всякий раз, когда пытаюсь загрузить первую страницу фильма, несмотря на то, что указанный URL-адрес определен в urlpatterns.

0
ElVi2

1 ответ

Это не так, как вы предоставляете два ПК в URL

Так должно быть

path('movie/<int:movie_id>/<int:user_id>/', views.movie, name='movie'),

Также это не способ предоставления URL в шаблоне, поэтому он должен быть примерно таким

<form action="{% url 'vote' %}" method="post">
 # {% url 'url_name' %}
  # if app_name provided {% url 'app_name:url_name' %}

И, пожалуйста, следуйте инструкциям шаг за шагом

58584751