Как я могу очистить переменные данные, переданные по URL? - PullRequest
2 голосов
/ 26 сентября 2011

Когда я использую форму, я очищаю данные поля, используя формы Django, но как вы очищаете переменные данные, которые передаются по URL?

Например, у меня есть URL-адрес, подобный следующему: http://mywebsite.com/tags/my-tag/, где my-tag - это переменная, которую я передаю функции в моем views.py.

Я пытался использовать форму Django для очистки данных, но я получаю сообщение об ошибке, в котором говорится, что « Объект TagForm» не имеет атрибута «cleaned_data» ».Я знаю, что переменная my-form достигает функции tags в views.py, поскольку я могу показать ее содержимое в шаблоне, поэтому проблема, вероятно, связана с тем, как ям с помощью формы.

views.py

def tags(request, my-tag):
    tagform = TagForm(request.GET)
    cleaned_dt = tagform.cleaned_data
    form_tag = cleaned_dt['tag']

forms.py

class TagForm(forms.Form):
    tag = forms.CharField()

Есть идеи?

Ответы [ 2 ]

2 голосов
/ 26 сентября 2011

Атрибут словаря cleaned_data появляется после вызова метода is_valid в форме.

def tags(request, my-tag):
    tagform = TagForm(request.GET)
    if tagform.is_valid():
        cleaned_dt = tagform.cleaned_data
        form_tag = cleaned_dt['tag']
    return render(request, "may_template.html", {"form":tagform})
2 голосов
/ 26 сентября 2011

Вы создаете TagForm с объектом запроса, но вы не даете TagForm значение my-tag везде, где я могу видеть.

Раздел URL /my-tag/ не является параметром запроса. Это часть URL-адреса, и, вероятно, она передается в функцию просмотра как my-tag (вы можете переименовать ее в my_tag, чтобы она была более Pythonic).

Редактировать

Вы можете просто создать объект dict для инициализации в объекте Form вместо request.GET. Пример здесь .

data = {'tag': my_tag,
    'anotherIfNecessary': 'Hi there'}

tagform = TagForm(data)

По сути, словарь, используемый для заполнения объекта формы, должен содержать сопоставление имен полей формы со значением, которое вы хотите установить.

В этом случае у вас есть имя поля формы «tag» и вы хотите установить его на my-tag (вы уверены, что не получите синтаксическую ошибку с дефисом в имени переменной? .). Я исправил свой пример.

...