Есть ли способ записать параметры URL с помощью django в urls.py? - PullRequest
1 голос
/ 25 июня 2011

Я пытаюсь написать что-то элегантное, где я не полагаюсь на объект запроса в моем коде.Во всех примерах используется: (r '^ hello / (? P. *) $', 'Foobar.views.hello'), но не похоже, что вы можете легко публиковать URL-адреса с помощью формы.Есть ли способ заставить этот URL отвечать на .... / привет? Name = smith

Ответы [ 2 ]

3 голосов
/ 25 июня 2011

Абсолютно.Если ваш URL сопоставлен с функцией, в данном случае foobar.views.hello, то эта функция может выглядеть следующим образом для запроса GET:

def hello(request):
    if request.method == "GET":
        name_detail = request.GET.get("name", None)

        if name_detail:
            # got details
        else:
            # error handling if required.

Данные в закодированных формах, т.е. параметры POST, доступны, если выHTTP POST от request.POST.

Вы также можете создать их самостоятельно, если хотите, скажем, параметры запроса для запроса POST.Просто сделайте это:

PARAMS = dict()
raw_qs = request.META.get('QUERY_STRING', '') # this will be the raw query string
if raw_qs:
    for line in raw_qs.split("&"):
        key,arg = line.split("=")
        PARAMS[key] = arg

И аналогично для параметров, закодированных в форме в не POST-запросах, сделайте следующее:

FORM_PARAMS = QueryDict(request.raw_post_data)

Однако, если вы пытаетесь использовать формы с Django,вам обязательно стоит взглянуть на django.forms .Вся библиотека форм просто сделает вашу жизнь проще;Я никогда не писал html-форму вручную, используя Django, потому что эта часть Django берет на себя всю работу.Для краткого изложения вы сделаете следующее:

forms.py :

class FooForm(forms.Form):
    name = fields.CharField(max_length=200)
    # other properties

или даже это:

class FooForm(forms.ModelForm):

    class Meta:
         model = model_name

Тогда в вашемзапрос, вы можете передать форму в шаблон:

def pagewithforminit(request):
    myform = FooForm()
    return render_to_response('sometemplate.html', {'nameintemplate': myform}, 
                                    context_instance=RequestContext(request))

и в представлении, которое получает его:

def pagepostingto(request):
    myform = FooForm(request.POST)

    if myform.is_valid(): # check the fields for you:
        # do something with results. if a model form, this:
        myform.save()
        # creates a model for you.

См. также модель формы .Короче говоря, я настоятельно рекомендую django.forms.

0 голосов
/ 25 июня 2011

Вы не можете поймать параметры GET в шаблоне URL.Как видно из django.core.handlers.base.BaseHandler.get_response, только часть URL-адреса, заканчивающаяся на request.path_info, используется для разрешения URL-адреса:

callback, callback_args, callback_kwargs = resolver.resolve(
         request.path_info)

request.path_info не содержит параметров GET.Об их обработке см. Ответ Ninefingers.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...