Saya telah mencoba membuat survei film di Django untuk tugas, dan saat ini saya sedang mengerjakan fungsinya. Sepertinya saya tidak mengerti mengapa itu tidak mengenali URL yang saya berikan.

Saya mencoba menghapus URL yang di-hardcode seperti yang ditunjukkan dalam tutorial Django di situs kerangka kerja, tetapi itu tidak membuat kesalahan hilang.

Berikut kutipan dari 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'),
]

Ini adalah tampilan film saya (seharusnya menyajikan film dan radio peringkat bintang bagi pengguna untuk menilai film), di mana URL dibuat dan diteruskan ke 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))

Kutipan HTML, di mana tampilan suara disebut:

<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>

Tampilan suara (harus disimpan ke database dan dialihkan ke film berikutnya, belum disimpan ke database, karena saya tidak ingin mengacaukannya dengan catatan sampai saya yakin fungsi saya berfungsi):

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)

Tidak peduli apa yang saya coba, saya mendapatkan NoReverseMatch di /polls/movie=1&user=9/ setiap kali saya mencoba memuat halaman film pertama, meskipun URL tersebut didefinisikan dalam urlpatterns.

0
ElVi2 28 Oktober 2019, 04:14

1 menjawab

Jawaban Terbaik

Ini bukan cara Anda memberikan dua pk di url

Seharusnya seperti ini

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

Juga ini bukan cara memberikan url di template jadi seharusnya seperti ini

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

Dan silakan ikuti tutorial langkah demi langkah

0
arjun 28 Oktober 2019, 01:53