我在将pk从URL传递到视图中时遇到问题。当所有URL路径都位于同一文件中时,我曾进行过此工作,但是由于文件结构不良,我不得不重新组织事情。我不知道为什么这不再起作用。当我在视图中将PK硬编码并显示所有内容时,确实存在细节。这可能很简单,但确实会有所帮助。
URL-http://127.0.0.1:8000/club_home/1/
index.html
<h2>Our Clubs</h2>
{% for club in all_clubs %}
<a href="{% url 'clubs:club_home_with_pk' pk=club.pk %}">
<li>{{ club.club_name }}</li>
</a>
{% endfor %}
urls.py:
urlpatterns = [
url(r'^', views.club_home, name='club_home'),
url(r'^(?P<pk>\d+)/', views.club_home, name='club_home_with_pk'),
url(r'^edit/$', views.edit_club, name='edit_club'),
]
views.py:
def club_home(request, pk=None):
if pk:
club = ClubInfo.objects.filter(pk=pk)
elif request.user.is_authenticated:
club = ClubInfo.objects.filter(user=request.user)
# photo = model.club_logo.ImageField(storage=profile_pics)
args = {'club': club,
}
return render(request, 'club_home_page.html', args)
club_home_page.html
<h3>Club Details</h3>
<p>
{% csrf_token %}
{% for info in club %}
<li>{{ info.club_name }}</li>
<li><img src="{{ info.club_logo }}" height="50px" width="50px"/></li>
<li>{{ info.club_address1 }}</li>
<li>{{ info.club_address2 }}</li>
<li>{{ info.club_address3 }}</li>
<li>{{ info.club_town }}</li>
<li>{{ info.club_county }}</li>
<li>{{ info.club_country }}</li>
</p>
查看玩家注册:
class RegisterPlayer(APIView):
renderer_classes = [TemplateHTMLRenderer]
template_name = 'player_registration.html'
def get(self, request):
serializer = PlayerRegistrationSerializer()
return Response({'serializer': serializer,
})
def post(self, request):
serializer = PlayerRegistrationSerializer(data=request.data)
if serializer.is_valid():
serializer.save()
return Response(template_name='player_registration_complete.html')
答案 0 :(得分:0)
问题出在您的网址格式中。具体来说,您的“ club_home”模式过于笼统。它匹配所有内容,包括提供PK的情况。
如果使用url()
格式,则应始终终止模式:
urlpatterns = [
url(r'^$', views.club_home, name='club_home'),
url(r'^(?P<pk>\d+)/$', views.club_home, name='club_home_with_pk'),
url(r'^edit/$', views.edit_club, name='edit_club'),
]
如果您使用的是Django的最新版本,则可以改用path
:
urlpatterns = [
path('', views.club_home, name='club_home'),
path('<int:pk>/', views.club_home, name='club_home_with_pk'),
path('edit/', views.edit_club, name='edit_club'),
]