簡體   English   中英

Python/Django - 如何將值從 html 傳遞到通過 {% url %} 查看?

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

我有一個 Django 應用程序,其中包含一個表單,用戶可以在其中 select “ choice1 ”或“ choice2 ”。 所以我想做的是,當用戶通過 html 中的單選按鈕輸入並單擊“更新”時,它會將新值( view.choice1view.valuechoice2是 Boolean 值)發送到我的 a查看,並在我的控制台中打印新值。

我有以下內容:

選擇菜單.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

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

視圖.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"))

網址.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')
]

所以,我想要的是,當用戶選擇choice1並按下按鈕Update時,它會在我的控制台中打印1

我用這段代碼得到的錯誤是:

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

有人知道我該如何解決這個問題嗎?

在視圖中使用 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"))

並在 urls.py 中使用

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

在 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>

您可以獲得預期的 output

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM