@Andross78

Как изменить background-color через POST на сервер?

Задание изменить background-color через POST на сервер

spoiler
Url:

path('set_color/', SetColorView.as_view(), name='colors'),


Form:
COLORS = (
    ('black', 'black'),
    ('white', 'white'),
    ('red', 'red'),
    ('yellow', 'yellow'),
    ('blue', 'blue'), ) 

class SetColorForm(forms.Form):
     background_color = forms.ChoiceField(choices=COLORS, widget=forms.widgets.RadioSelect)


Template:
{% extends 'base.html' %}
{% block content %}
    <form action="" method="post" style="background-color:{{ 
form.field.value|default:'powderblue'}}">
        {% csrf_token %}
        {{ form.as_p }}
        <input type="submit" value="Set"/>
    </form>
{% endblock %}


View:

class SetColorView(View):
    form_class = SetColorForm
    template_name = 'exercises/colors.html'

def get(self, request):
    form = self.form_class
    context = {
        'form': form,
    }
    return render(request, self.template_name, context)

def post(self, request, *args, **kwargs):
    form = self.form_class(request.POST)
    success_url = 'exercises:colors'
    if form.is_valid():
        back_color = form.cleaned_data['background_color']
        return redirect(reverse(success_url, kwargs={'form': back_color}))

Исключение что я получаю: Reverse for 'colors' with keyword arguments '{'form': 'red'}' not found. 1 pattern(s) tried: ['exercises\\/set_color\\/$']

Что я сделал не так в это строчке "return redirect(reverse(success_url, kwargs={'form': back_color}))" ?
  • Вопрос задан
  • 62 просмотра
Пригласить эксперта
Ответы на вопрос 1
Sobolev5
@Sobolev5
Python developer
Покажите пожалуйста корневой файл urls.py
Ну и в целом, замечу что ваш код лишен какого либо смысла, поскольку цвет никуда не сохраняется.

Если задание было изменить цвет фона по ссылке, то это можно сделать и без использования вашей конструкции.

<a href="?background_color=red">Поставить красный цвет</a>
<body {% if request.GET.background_color %}style="background-color:{{ request.GET.background_color }}{% endif %}">
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы