2017-12-03 20 views
0

私はurlから変数を取得し、djangoを使用してテンプレートに表示しようとしています。 はここでバケツのページへのリンクがあるページです:Django url変数が渡されない

<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') 

、ここだから私はここにbucketName変数を渡している

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

views.pyだ、しかし私は「None」を取得していない代わりに、変数名。 bucket.htmlは次のとおりです:

<div class="mainPage"> 
    <div class="s3Wrapper"> 
     <h2>{{ bucketName }}</h2> 
    </div> 
</div> 

私は間違っていますか?変数が渡されないのはなぜですか?おかげさまで

答えて

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 
+1

'get'メソッド' kwargs ['bucket'] 'で十分です。私は 'self.kwargs ['bucket']'を実行するのに慣れています。これは 'get_context_data'のような他のメソッドでも動作します。 – Alasdair

+0

これは機能しました!ありがとう。私はこれを改めるつもりです。 – davidb

関連する問題