0

django で簡単な Web アプリを開発しようとしましたが、エラーが発生しました。基本的に、URLで渡されたパラメーターは受け入れられず、取得します

/NECapp/offers/ offers() の TypeError は、正確に 2 つの引数を取ります (1 つ指定)

完全なトレースについてはhttp://dpaste.com/757822/

アプリの概要: ユーザーが郵便番号を入力すると、その値に関連するオブジェクトのリストが表示されます。何をいじっても、コードは常にこの時点でさまざまなエラーで壊れるので、ここにほとんどのコードをダンプします。私が試したことの山が原因で、おそらくインポートや他の場所に不要なコード行があるので注意してください.

ビュー.py

from django.shortcuts import render_to_response
from django.http import HttpResponse
from models import Offer, ZipCode
from django.http import HttpRequest

def index(request):
    return render_to_response('NECapp/index.html')

def enterzipcode(request):
    return render_to_response('NECapp/enterzipcode.html')

def offers(request, zip):
    return HttpResponse('you entered %zip' %(zip))

アプリのurls.py

from django.conf.urls import patterns, include, url
from django.views.generic import ListView

from NECapp.models import Offer
from NECapp import views


# Uncomment the next two lines to enable the admin:
from django.contrib import admin
admin.autodiscover()

urlpatterns = patterns('NECapp',
    url(r'^$', 'views.index', name='index'),
    url(r'^enterzip/$', 'views.enterzipcode', name='zipcode'),
    url(r'^offers/(?P<zip>\d{5})/$', 'views.offers', name='offers'),
    url(r'^offers/$', 'views.offers'),   
)

どんな種類の助けでも大歓迎です!

4

3 に答える 3

1

URL /NECapp/offers/?zip=55104 を呼び出すと、パラメーターとしてではなくクエリ文字列として zip を渡したため、2 番目のオファーの URL パターンが呼び出され、デフォルトの引数を指定していないため、エラーが発生します。エラーを示します。例外値: offers() は正確に 2 つの引数を取ります (1 つ指定)

def offers(request, zip):
    return HttpResponse('you entered %zip' %(zip))

次の 2 つの点を修正する必要があります。

1) URL パターンに従って、リクエスト URL は /NECapp/offers/55104/ である必要があります。2) 2 番目の URL パターンが呼び出されるたびに、エラーが発生します。デフォルトの引数で修正します。

def offers(request, zip=""):
    return HttpResponse('you entered %zip' %(zip))

フォーム経由でデータを投稿しようとしている場合は、フォーム タグに method="POST" を入力します。すべてのフォーム データが request.POST ディクショナリで使用できるため、2 つの URI パターンは必要ありません。HTML:

<form action="/NECapp/offers/" method="post">

URLS.py:

url(r'^offers/$', 'views.offers'),   

Views.py:\

def offers(request):
    zip=request.POST.get("zip")
    return HttpResponse('you entered %zip' %(zip))
于 2012-06-12T03:37:33.327 に答える
0

機能させるには ( NECapp/offers/URL)、デフォルト値を に追加するだけですzip

views.offersこれは、要求された URI に応じて、次の 2 つのケースでビューを実行するためです。

  1. " " の後に何かがある場合/offers/(郵便番号が渡されています) - このために、最後から 2 番目の URL パターン ( が付いているものname='offers')があります。
  2. " " の後に何もない場合/offers/(これには最後の URL パターンがあります)。

ビューは次のようになります。

def offers(request, zip=None):
    if zip is None:
        # No zip has been set (/offers/)
        return HttpResponse('you did not enter anything')
    else:
        # Some zip has been set (/offers/some_zip)
        return HttpResponse('you entered %zip' %(zip))

編集:

http://localhost:8000/NECapp/offers/?zip=55104Vivek は、の代わりに呼び出していることを正しく指摘しhttp://localhost:8000/NECapp/offers/55104ました。これが、最後に一致した URI パターン (r'^offers/$'ルールのあるもの) を取得し、ビューがパラメーターなしで呼び出される理由です。私のソリューションを使用する場合、 URL 内でyou did not enter anything渡していないため、応答で " " が返さzipれます (実際には、クエリ文字列で渡されます。必要に応じて、代わりに URL の主要部分に渡す必要があります)。 URLconf を使用します)。

要するに、私のソリューションを使用して、zip次のような URLを渡しますhttp://localhost:8000/NECapp/offers/55104。または、このパターンを削除して、クエリ文字列から取得することもできzipます。request.GET.get(zip)zip

于 2012-06-12T03:38:17.757 に答える
0

urls.py をよく見てください

url(r'^offers/(?P<zip>\d{5})/$', 'views.offers', name='offers'),

と競合する

url(r'^offers/$', 'views.offers'),   

チッ!

于 2012-06-12T03:24:40.107 に答える