3

私はボトルの SimpleTemplate を書いていて、日付を比較したいと思っています。テンプレート内のpythonパッケージをどのように(そしてどこに)インポートしますか? 出来ますか?

これが私がやろうとしていることの例です。日付を表すデータ (文字列) を今日の日付と比較したい:

%if datetime.strptime(report['date'], '%m/%d/%Y') < datetime.today():
    <span class="ui-icon ui-icon-circle-close"></span>
%elif report['result']:
    <span class="ui-icon ui-icon-circle-check"></span>
%elif not report['result']:
      <span class="ui-icon ui-icon-alert"></span>
%end

通常のpythonプログラムでそれを機能させるには、次のように言わなければなりません

from datetime import datetime

しかし、テンプレートでそれを行う方法はありますか?

4

3 に答える 3

2

はい、テンプレート内からモジュールをインポートできます。これは、たとえば、エラー ページを生成するために bottlepy 自体によって使用されます。

ERROR_PAGE_TEMPLATE = """
%%try:
    %%from %s import DEBUG, HTTP_CODES, request, touni
    <!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML 2.0//EN">
    <html>
        <head>
            <title>Error: {{e.status}}</title>
...
于 2016-01-03T16:54:02.240 に答える
0

いいえ、できません。テンプレートは、複雑なロジックを含むことを意図したものではなく、プレゼンテーション層の一部です。ビュー内のすべてのデータを準備し、すでに処理されたテンプレートに渡す必要があります。

したがって、あなたの場合、おそらくロジックをビューに移動する必要があります-これらの線に沿って何かが生じます:

from datetime import datetime
if datetime.strptime(report['date'], '%m/%d/%Y') > datetime.today():
    report["status"] = "due"
else:
    if report["result"]:
        report["status"] = "pending_check"
    else:
        report["status"] = "missing_result"

次に、テンプレートで次のようにフラグを確認します。

%if report["status"] == "due":
    <span class="ui-icon ui-icon-circle-close"></span>
%elif report["status"] == "pending_check":
    <span class="ui-icon ui-icon-circle-check"></span>
%elif report["status"] == "missing_result":
      <span class="ui-icon ui-icon-alert"></span>
%end

ベストプラクティスは、データをプレゼンテーションから分離し、ビューでHTMLクラス名を割り当てず、添付のスニペットで行ったようにテンプレートで処理されたデータを処理することであるため、意図的にclosecheckおよび値alertとして使用していません。report["status"]

次に、アイコンを変更する場合は、テンプレートでのみ変更します。これは、ビューで表示を変更するよりも優れています(たとえば、アイコンを有効にするには、Webサーバーを再起動する必要があります)。

更新(2016年4月): 私が答えたので、ボトルテンプレートにモジュールをインポートすることが可能になった、または可能になったようですが、それでも悪い考えです:)

于 2013-03-14T19:15:55.360 に答える
0

私はちょうど試しました:

%from mymodule import *

それは機能しているようで、さらにチェックする時間はありません。インポートはPythonメソッドを呼び出すだけであり、したがって機能するはずです。

于 2013-05-25T10:57:28.663 に答える