Captured URL parameters in form

前端 未结 2 786
一整个雨季
一整个雨季 2021-01-15 01:09

I am using Userena and I am trying to capture URL parameters and get them to my form but I\'m lost how to do this.

What I would like to do in my template is:

相关标签:
2条回答
  • 2021-01-15 01:55

    You can access the url in your template using -

    {% request.get_full_path %}
    

    (see the docs for more info).

    However if you just want to get the planslug variable then pass it from the view to the template and access it in the template (it's available in the view because it's a named parameter in the url) -

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

    and then in your template you get it with -

    {% planslug %}
    

    If you're using class based views then you'll need to override get_context_data to add the planslug variable to your context before you pass it to the template-

    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
    
    0 讨论(0)
  • 2021-01-15 02:08

    If you use class based views, you can overwrite the def get_form_kwargs() method of the FormMixin class. Here you can pass any parameters you need to your form class.

    in urls.py:

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

    in 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
    

    in 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
    

    hope this helps :-)

    0 讨论(0)
提交回复
热议问题