【发布时间】:2018-08-04 18:51:50
【问题描述】:
我一直在阅读 Django 教程,并且遇到了一个问题,即每当我尝试发布表单以将数据从网页传递到数据库时,它都不会转到应该使用的方法以便执行操作。这是代码
urls.py
from django.urls import path, re_path
from . import views
app_name = 'music'
urlpatterns = [
path('', views.index, name='index'),
# /music/<album_id>/
re_path('(?P<album_id>[0-9]+)/', views.detail, name='detail'),
# /music/<album_id>/favorite/
re_path('(?P<album_id>[0-9]+)/favorite/', views.favorite, name='favorite'),
]
details.html
<img src="{{ album.album_logo }}"/>
<h1>{{ album.album_title }}</h1>
<h3>{{ album.artist }}</h3>
{% if error_message %}
<p><strong>{{ error_message }}</strong></p>
{% endif %}
<form action="{% url 'music:favorite' album.id %}" method="post">
{% csrf_token %}
{% for song in album.song_set.all %}
<input type="radio" id="song{{ forloop.counter }}" name="song" value="song.id"/>
<label for="song{{ forloop.counter }}">
{{ song.song_title }}
{% if song.is_favorite %}
<img src="https://i.imgur.com/b9b13Rd.png"/>
{% endif %}
</label><br>
{% endfor %}
<input type="submit" value="Favorite">
</form>
views.py
from django.shortcuts import render, get_object_or_404
from django.http import Http404
from .models import Album, Song
import pdb;
def index(request):
all_albums = Album.objects.all()
return render(request, 'music/index.html', { 'all_albums': all_albums })
def detail(request, album_id):
album = get_object_or_404(Album, pk=album_id)
return render(request, 'music/detail.html', {'album': album})
def favorite(request, album_id):
album = get_object_or_404(Album, pk=album_id)
try:
selected_song = album.song_set.get(pk=request.POST['song'])
except (KeyError, Song.DoesNotExist):
return render(request, 'music/detail.html', {
'album': album,
'error_message': "You did not select a valid song",
})
selected_song.is_favorite = True
selected_song.save()
return redirect('music:detail', album_id=album_id)
任何指针都会对为什么会发生这种情况有所帮助。我回到教程并再次输入其中的任何内容以确保我做得正确。可能是因为它是一个稍微旧的版本,但我不确定。我正在运行 Django 2.0 版,而本教程正在运行 1.9.1
【问题讨论】:
标签: django python-3.x django-forms django-templates