3

「djangoを使用して一般的なビューを逆にする方法」と「djangoという名前のURL、一般的なビュー」というタイトルの他の質問を見ましたが、私の質問は少し異なり、それがだまされているとは思いません。

コード:

from django.views.generic import list_detail, create_update
from django.core.urlresolvers import reverse
from django.conf.urls.defaults import *

partners_add = {'form_class': FooForm,
      'post_save_redirect': reverse('foo-list'),
      }


urlpatterns = patterns('',
      url(r'^foo/$', list_detail.object_list, foo_list, name='foo-list'),
      url(r'^foo/add/$', create_update.create_object, foo_add, name='foo-add'),
      )

ただし、コードを実行すると、「含まれている urlconf bar.urls にパターンがありません」というエラーが表示されます。次に、reverse('foo-list') を '/bar/foo/' に変更すると機能します。ただし、テンプレート内で {% url foo-list %} を呼び出すと、正しい URL が取得され、コードが機能します。

逆を追加すると、同じエラーで同じ urlpatterns 内のすべての URL が壊れます。

Python 2.6でDjango 1.1を実行しています

4

4 に答える 4

8

ここで見つけた問題の解決策は次のとおりです。 http://andr.in/2009/11/21/calling-reverse-in-django/

リンクが消えた場合に備えて、以下のコード スニペットを貼り付けました。

from django.conf.urls.defaults import *
from django.core.urlresolvers import reverse
from django.utils.functional import lazy
from django.http import HttpResponse

reverse_lazy = lazy(reverse, str)

urlpatterns = patterns('',
url(r'^comehere/', lambda request: HttpResponse('Welcome!'), name='comehere'),
url(r'^$', 'django.views.generic.simple.redirect_to',
{'url': reverse_lazy('comehere')}, name='root')
)
于 2010-07-16T05:47:36.413 に答える
2

Django 1.4 Alpha には、reverse_lazyこの問題を解決する機能が含まれています。

于 2011-08-30T22:06:24.717 に答える
1

タイプミスがあります-前に開始引用符はありませんpost_save_redirect。また、文字列としてではなく、モジュールを直接参照しているので、インポートlist_detailしましたか?create_update

編集済みreverse私は、問題がpartners_add辞書に呼び出しがあることに起因しているのではないかと思います。urlconfは、urlconfのインポート時にまだ定義されていない属性に依存するようになったため、これは循環依存につながると思います。

その呼び出しを削除してみてください(おそらく関連するURLをハードコーディングしてください)。それが機能するかどうかを確認してください。

于 2009-11-25T09:29:46.063 に答える
0

機能する 1 つの方法は、create_object 関数をラップし、views.py から逆を使用することです。

urls.py では、コードは次のようになります。

urlpatterns = patterns('',
  url(r'^foo/$', list_detail.object_list, foo_list, name='foo-list'),
  url(r'^foo/add/$','myapp.views.my_create_object', name='foo-add'),
  )

そして myapp/views.py で

from django.views.generic.create_update import create_object
from feincms.content.application.models import reverse

from forms import FooForm


def my_create_object(request):
    return create_object(request, form_class=FooForm, 
                         post_save_redirect=reverse("foo-list"))
于 2009-12-26T13:07:02.293 に答える