Django url变量没有传递

时间:2017-12-03 16:54:25

标签: python django

我正在尝试从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>

我做错了什么?为什么变量没有通过? 感谢。

1 个答案:

答案 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})

在使用基于类的视图时,尽量避免覆盖getpost。在这种情况下,您可以这样做:

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