我正在尝试从url获取变量并使用django将其显示在模板中。 这是包含桶页面链接的页面:
<div id="left">
<a href="{% url 'project:bucket' bucket=bucket.bucketName %}"><h4 id='s3ItemName'>{{ bucket.bucketName }}</h4></a>
</div>
这会正确显示存储桶名称,并包含指向abucket详细信息页面的链接。我的urls.py看起来像这样:
url(r'bienbox/bucket/(?P<bucket>\w+)$',views.bucketPage.as_view(),name='bucket')
现在,这是views.py
class bucketPage(TemplateView):
template_name = "project/bucket.html"
def get(self, request, bucket):
bucketName = request.GET.get('bucket')
return render(request,self.template_name,{'bucketName': bucketName})
所以我在这里传递bucketName
变量,但是当页面打开时,我得到“None”而不是变量名。这是bucket.html:
<div class="mainPage">
<div class="s3Wrapper">
<h2>{{ bucketName }}</h2>
</div>
</div>
我做错了什么?为什么变量没有通过? 感谢。
答案 0 :(得分:3)
self.request.GET
保存查询字符串中的变量,例如如果你做了/bienbox/bucket/?bucket=mybucket
。
在您的情况下,您可以从self.kwargs
获取存储桶名称。
def get(self, request, *args, **kwargs):
bucketName = self.kwargs['bucket']
return render(request,self.template_name,{'bucketName': bucketName})
在使用基于类的视图时,尽量避免覆盖get
或post
。在这种情况下,您可以这样做:
class bucketPage(TemplateView):
template_name = "project/bucket.html"
def get_context_data(self, *args, **kwargs):
context = super(bucketPage, self).get_context_data(**kwargs)
context['bucketName'] = self.kwargs['bucket']
return context