[英]How to pass pk argument from url into view in Django?
我在将 pk 从 URL 传递到我的视图中时遇到问题。 当所有 URL 的路径都位于同一个文件中时,我之前有过这个工作,但由于文件结构不佳,我不得不重新组织。 我无法弄清楚为什么这不再起作用。 细节确实存在,因为我在视图中对 PK 进行了硬编码,并且显示了所有内容。 这可能很简单,但真的很感激一些帮助。
网址 - http://127.0.0.1:8000/club_home/1/
索引.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 %}
网址.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'),
]
视图.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')
问题在于您的 URL 模式。 具体来说,你的“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'),
]
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.