2011-06-25 8 views
1

私は、私のコードでRequestオブジェクトに頼っていない、何かエレガントなものを書こうとしています。すべての例では、 (r '^ hello /(?P。*)$'、 'foobar.views.hello') が使用されていますが、形。そのURLが..../hello?name = smithに反応するようにする方法はありますか?urls.pyにdjangoでURLパラメータを取得する方法はありますか?

答えて

3

絶対に。あなたの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パラメータ、request.POSTからあなたHTTP POST場合は利用可能です。

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 

、同様にこの操作を行います:ちょうどこれを行うあなたはジャンゴでフォームを使用しようとしている場合は、しかし、

FORM_PARAMS = QueryDict(request.raw_post_data) 

を、あなたは間違いなくなりますdjango.forms。フォームライブラリ全体は、通常、あなたの人生を楽にします。私はDjangoを使って手作業でhtml形式を書いたことはありません。これは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. 

model formsも参照してください。つまり、django.formsを強くお勧めします。

0

URLパターンでGETパラメータをキャッチすることはできません。あなたがdjango.core.handlers.base.BaseHandler.get_responseで見ることができるように、request.path_infoで終わるURLの一部のみがURLを解決するために使用される:

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

request.path_infoはGETパラメータが含まれていません。それらを処理するには、ナインフィンガーの答えを参照してください。

関連する問題