0

こんにちは、私は Django 1.5 をサポートする Google アプリ エンジン プロジェクトで作業していますが、問題は次のようになります。

Google ユーザーをパラメータとしてビューを呼び出すヘルパー デコレータを作成しました。

def login(required=True):
    def _wrapper(f):
        @wraps(f)
        def __wrapper(request, *args, **kwargs):
            user = users.get_current_user()
            if required and user:
                return f(request, user, *args, **kwargs)
            elif required and not user:
                url = users.create_login_url(request.get_full_path())
                return HttpResponsePermanentRedirect(url)
            elif user:
                return f(request, user, None, *args, **kwargs)
            else:
                url = users.create_login_url(request.get_full_path())
                return f(request, user, url, *args, **kwargs)
        return __wrapper
    return _wrapper

ビューがユーザーのログインを必要とする場合、現在の Google ユーザーをチェックします。ビューはそれを必要としない場合があります。その場合、ビューを呼び出すだけです。これで、新しい 2 つのビューができました。

pages.urls.py

urlpatterns = patterns('projecct.pages.views',
    url(r'^help/$', 'hlp', name='pages-help'),
)

ビュー

@login(required=False)
def homepage(request, user, login_url):
    """
    Site wide home page
    """
    return render_to_response(
        'pages/home.html',
        {'user': user, 'login_url': login_url, })

@login(required=False)
def hlp(request, user, login_url):
    return render_to_response(
        'pages/help.html',
        {'user': user, 'login_url': login_url})

エラー:

NoReverseMatch at /
Reverse for 'pages-help' with arguments '()' and keyword arguments '{}' not found.
Request Method: GET
Request URL:    http://localhost:8080/
Django Version: 1.5
Exception Type: NoReverseMatch
Exception Value:    
Reverse for 'pages-help' with arguments '()' and keyword arguments '{}' not found.

...

Reverse for 'pages-help' with arguments '()' and keyword arguments '{}' not found.


{% if user %}
  <a href="{% url 'userprofile-show' %}">...</a>
{% else %}
  <a href="{{ login_url }}">Login</a>
{% endif %}
*<a href="{% url 'pages-help' %}">...</a>* 

'pages-help' url の行は で強調表示されDjango、エラーの原因としてデコレータの最後の else をマークします。

else:
    url = users.create_login_url(request.get_full_path())
    return f(request, user, url, *args, **kwargs)

homepageこれがエラーの原因であると仮定すると、同じデコレーターと同じパラメーターを使用しているため、ビューを処理したときに失敗しなかったのはなぜですか?

そして、他の名前付き url'userprofile-show'も同じデコレータを使用し、タンプレートを処理したときに失敗しませんでした:

@login(required=True)
def show(request, current_user):
    ...

私はアイデアがありません。どんな助けでも大歓迎です。

編集。ルート urls.py を追加

urlpatterns = patterns('',
    url(r'^profile/', include('project.userprofile.urls')),
    # Static pages
    url(r'^pages/$', include('project.pages.urls')),
    url(r'^$', 'project.pages.views.homepage', name='homepage'),
)
4

1 に答える 1

0

問題は、ルート URL の次の行にありました。

url(r'^pages/$', include('project.pages.urls')),

正規表現の最後にある を削除したところ、そのため$アプリをキャッチしていませんでした。ノブの間違い。urls.py$

とにかく助けてくれてありがとう。

于 2013-10-10T03:13:48.483 に答える