質問

私はコンテストアプリを書いています。コンテストは特定の日付の真夜中に閉まります。 CookieWizardViewから、formtoolsを使用してからアプリが自動的に切り替わりたいです。一般的なビューライブラリから、通常のTemplateViewに。

現在の私のURLPatternの関連部分は次のようになります:

urlpatterns += patterns('',
    url(r'^$', 'appname.views.contest'), # the CookieWizardView
)
.

そして一定日の後、それがこのように見えるかのように機能するようにそれを好きです:

urlpatterns += patterns('',
    url(r'^$', 'appname.views.contestclosed'), # a TemplateView
)
.

私は完全に完全に罰金を持つことで罰金を持つことで、その日の真夜中に上がりたくない!

~~

これは解決しましたが、私は新しい質問に答えることができません。

私は私のviews.pyに関数を作りました:

def contest_switcher(request):
    if datetime.datetime.now() < datetime.datetime(YEAR_OVER, MONTH_OVER, DAY_OVER):
        return contest(request)
    else:
        return contestclosed(request)
.

これはトリックをしています、今私のURLPatternは次のとおりです。

urlpatterns += patterns('',
    url(r'^$', 'appname.views.contest_switcher'),
)
.

私は私のコンテストの閉じた景色に関数を追加しなければなりませんでしたが、それは投稿を期待していなかったので、誰かが真夜中のコンテストフォームに記入しようとしているならば起こるかもしれません:

class ContestClosedView(TemplateView):
    template_name = "appname/closed.html"

    def post(self, *args, **kwargs):
        return self.get(*args, **kwargs)

contestclosed = ContestClosedView.as_view()
.

役に立ちましたか?

解決

これをオフにするためにurls.pyをハッキングしようとする必要はありません。このようなビューを指すURLパターンを1つ設定します。

def contest_page(request, contest_id):
    try:
        contest = Contest.objects.get(pk=contest_id)
    except Contest.DoesNotExist:
        raise Http404  # minimum necessary - you can do better
    if datetime.datetime.now() < contest.end_date:  # model field rather than module constants
        return contest(request, contest_id)  # CookieWizardView
    else:
        return contestclosed(request, contest_id)  # TemplateView
.

これは基本的に改良されたcontest_switcherです:

  • 複数のコンテストに適用されます
  • コンテストは自分の終わり日を知っているので、あなたは定数のモジュールの範囲を乱雑にしないように
  • 単純なurls.pyとビューは、表示されているものを委任すること(あなたは知っている、 view
  • を委任します。

(この例では、モデルを対応してモデルを変更し、正しいライブラリなどをすべてインポートすることを意味します。)

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top