2

私は Userena を使用しており、URL パラメーターをキャプチャしてフォームに取得しようとしていますが、これを行う方法がわかりません。

テンプレートでやりたいことは次のとおりです。

<a href="/accounts/signup/freeplan">Free Plan</a><br/>
<a href="/accounts/signup/proplan">Pro Plan</a><br/>
<a href="/accounts/signup/enterpriseplan">Enterprise Plan</a><br/>

そして、私のurls.pyで

url(r'^accounts/signup/(?P<planslug>.*)/$','userena.views.signup',{'signup_form':SignupFormExtra}),

次に、理想的には、forms.py でその planlug を使用して、プロファイルにユーザー プランを設定したいと思います。

キャプチャした URL パラメータをカスタム フォームに取得する方法がわかりません。extra_context を使用できますか? Userena サインアップ ビューをオーバーライドする必要がありますか?

4

2 に答える 2

11

クラスベースのビューを使用する場合、FormMixin クラスの def get_form_kwargs() メソッドを上書きできます。ここで、必要なパラメータをフォーム クラスに渡すことができます。

urls.py で:

url(r'^create/something/(?P<foo>.*)/$', MyCreateView.as_view(), name='my_create_view'),

views.py で:

class MyCreateView(CreateView):
    form_class = MyForm
    model = MyModel

    def get_form_kwargs(self):
        kwargs = super( MyCreateView, self).get_form_kwargs()
        # update the kwargs for the form init method with yours
        kwargs.update(self.kwargs)  # self.kwargs contains all url conf params
        return kwargs

forms.py で:

class MyForm(forms.ModelForm):

    def __init__(self, foo=None, *args, **kwargs)
        # we explicit define the foo keyword argument, cause otherwise kwargs will 
        # contain it and passes it on to the super class, who fails cause it's not
        # aware of a foo keyword argument.
        super(MyForm, self).__init__(*args, **kwargs)
        print foo  # prints the value of the foo url conf param

お役に立てれば :-)

于 2014-07-16T12:25:07.473 に答える
1

- を使用して、テンプレートの URL にアクセスできます。

{% request.get_full_path %}

(詳細については、ドキュメントを参照してください)。

ただし、変数を取得したいだけの場合は、planslugそれをビューからテンプレートに渡し、テンプレートでアクセスします (URL の名前付きパラメーターであるため、ビューで使用できます) -

def signup(request, planslug=None):
    #
    render(request, 'your_template.html', {'planslug':planslug}

そして、テンプレートでそれを取得します-

{% planslug %}

クラスベースのビューを使用している場合は、 get_context_data をオーバーライドplanslugして、変数をテンプレートに渡す前にコンテキストに追加する必要があります-

def get_context_data(self, *args, **kwargs):
    context = super(get_context_data, self).get_context_data(*args, **kwargs)
    context['planslug'] = self.kwargs['planslug']
    return context
于 2013-02-20T22:02:34.020 に答える