简体   繁体   English

Python/Django - 如何将值从 html 传递到通过 {% url %} 查看?

[英]Python/Django - How to pass value from html to view via {% url %}?

I have a Django application that contains a form where the user can select " choice1 " or " choice2 ".我有一个 Django 应用程序,其中包含一个表单,用户可以在其中 select “ choice1 ”或“ choice2 ”。 So what I'm trying to do is that when an user gives an input via the radiobutton in the html and clicks "Update", it sends the new values ( view.choice1 and view.valuechoice2 which are Boolean values) of to my a view, and prints the new values in my console.所以我想做的是,当用户通过 html 中的单选按钮输入并单击“更新”时,它会将新值( view.choice1view.valuechoice2是 Boolean 值)发送到我的 a查看,并在我的控制台中打印新值。

What I have is the following:我有以下内容:

choiceMenu.html选择菜单.html

<form class="card" action="" method="POST" enctype="multipart/form-data">
    <input type="radio" name="update_choice" value="choice1">  Choice1 </input>
    <input type="radio" name="update_choice" value="choice2">  Choice2 </input>
    <div class="form-group">
        <a href="{% url 'core:choicemenu:choices' view.choice1 %}" class="btn btn-secondary btn-sm">Update</a>
    </div>
</form>

model.py model.py

class ChoiceModel(models.Model):
    choice1 = models.BooleanField(default=False)
    choice2 = models.BooleanField(default=True)

    def get(self):
        new_self = self.__class__.objects.get(auto=self.choice1)

        self.__dict__.update(new_self.__dict__)
        return reverse("core:choices", kwargs={"choice1": self.choice1})

views.py视图.py

class ChoiceMenu(generic.TemplateView):
    template_name = 'core/choiceMenu.html'
    context_object_name = 'choicemenu'
    current_model_set = ChoiceModel.objects.get(id=1)

    choice1 = int(current_model_set.choice1 == True)
    choice2 = int(current_model_set.choice2 == True)


class ChoiceSetting(generic.TemplateView):
    extra_context = {"choices_page": "active"}
    context_object_name = 'choices'
    template_name = 'core/choices/choiceindex.html'

    def get(self, queryset=None, **kwargs):
        choice1 = self.kwargs.get("choice1")

        logger.info(choice1)  ### <<-- I want to get this printed in my console

        return redirect(reverse("core:choicemenu"))

urls.py网址.py

app_name = 'core'
    urlpatterns = [
        path('choicemenu', login_required(views.ChoiceMenu.as_view()), name='choicemenu'),
        path('choicemenu/choices/<int:choice1>/', login_required(views.ChoiceSetting.as_view()), name='choices')
]

So, what I want is that when the user selects choice1 and pushes the button Update , it prints 1 in my console.所以,我想要的是,当用户选择choice1并按下按钮Update时,它会在我的控制台中打印1

The error I get with this code is:我用这段代码得到的错误是:

django.urls.exceptions.NoReverseMatch: Reverse for 'choices' with arguments '('',)' not found. 1 pattern(s) tried: ['choicemenu/choices/\\?P(?P<choice1>[^/]+)\\\\w\\+\\)\\$/\\Z']

Does somebody know how I can get this fixed..?有人知道我该如何解决这个问题吗?

Use the post method in view like在视图中使用 post 方法

class ChoiceSetting(generic.TemplateView):
extra_context = {"choices_page": "active"}
context_object_name = 'choices'
template_name = 'core/choices/choiceindex.html'

def post(self, *args, **kwargs):
    choice1 = self.request.POST.get('update_choice')

    logger.info(choice1)  ### <<-- I want to get this printed in my console

    return redirect(reverse("core:choicemenu"))

and in urls.py use并在 urls.py 中使用

path('choicemenu/choices/', login_required(views.ChoiceSetting.as_view()), name='choices')

and in html file在 html 文件中

<form class="card" action="{% url 'core:choicemenu:choices' %}" method="POST" enctype="multipart/form-data">{% csrf_token %}<input type="radio" name="update_choice" value="choice1">  Choice1 </input>
<input type="radio" name="update_choice" value="choice2">  Choice2 </input>
<div class="form-group">
    <button class="btn btn-secondary btn-sm" type="submit">Update</a>
</div>

you can get your expected output您可以获得预期的 output

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM