2

development.ini または production.ini の特定のユーザー定義設定に基づいて、ビュー/テンプレートの内容を変更することは可能ですか?

例として、クラスのすべての生徒をリストするピラミッド Web アプリを開発しているとします。バックエンド データベースには、'student' というテーブルが 1 つだけあります。ここで、テーブル「教師」もデータベースに追加するオプションのスクリプトを開発します。理想的には、Web アプリは両方のケースで実行できる必要があります。教師テーブルが見つからない場合は、クエリを実行せず、生徒の詳細を表示するだけです。教師テーブルが存在する場合、生徒の名前とともに教師の名前が出力されます。

私の考えでは、これは次のいずれかの方法で達成できます-

  1. 教師と生徒のみのページと生徒のみのページのルート (URL) を分けてください。問題は、学生情報しか持っていない場合、人々が実際に前者に電話をかけるのを止めることができないことです. これにより、不要なエラー ページが表示されます
  2. .ini ファイルで設定 teacher_enabled=true/false を使用します。この設定には、settings['teacher_enabled'] を介して __ init __.py ファイルでアクセスできます。単一のルート (「ホーム」、「/」など) のみを構成しますが、参照変数が true/false であるかどうかに基づいて、異なるビューにマップします。これは @view_config デコレーターの使用を許可せず、両方のケースのテンプレートを別々にする必要があります
  3. 再び設定変数を使用して、何らかの方法でビューに渡します。ビューで関連するクエリのみを作成します。例 - teacher_enabled が True の場合、教師テーブルをクエリします。それ以外の場合は、生徒テーブルのみをクエリします。この変数をテンプレートにも渡し、詳細を表示するかどうかを決定します (教師名など)。

私の質問は、これらのアプローチのどれを使用する必要があるかということです。設定変数がビューに渡される場合、どのように行うことができますか? そして、この問題に対処する標準的な方法はありますか?

4

1 に答える 1

5

教師+生徒と生徒専用のページに別々のルート(URL)を保持します。問題は、学生情報しかない場合、人々が実際に前者に電話するのを止めることができないということです。

ああ、でもできます!番号2と組み合わせます。teacher_enabled=true/ false設定を.iniファイルに追加すると、次のようなコードを使用できます。

from pyramid.threadlocal import get_current_registry
from pyramid.httpexceptions import HTTPFound

#Define some awesome student views here
@view_config(name='student')
def student(request):
    return HTTPFound('Foo!')

if get_current_registry().settings['teacher_enabled']:

    #Some awesome student and teacher views here
    @view_config(name='student_and_teacher')
    def student_and_teacher(request):
        return HTTPFound('Bar!')

3番目も実行可能です。覚えておいてください: 許可よりも許しを求める方が簡単です。したがって、次のようなことができます:(例としてSQLAlchemyを使用)

from your_models.teacher import Teacher
from sqlalchemy.exc import NoSuchTableError

try:
    teacher = session.query(Teacher).filter(Teacher.id==42).first()
except NoSuchTableError:
    teacher = Teacher('Unknown')
于 2012-04-20T05:25:46.690 に答える