4

django アプリケーションで着信 URL パラメータから日付を解析したいと思います。私が思いついた:

def month_transactions(request, month, year):
    current_month = calculate_current_month(month, year)
    next_month = calculate_next_month(current_month)
    debit_transactions = Transaction.objects.filter(is_credit=False,
                                                    due_date__range=(current_month, next_month))
    credit_transactions = Transaction.objects.filter(is_credit=True,
                                                     due_date__range=(current_month, next_month))
    return render(request, 'finances/index.html', {
        'debits': debit_transactions,
        'credits': credit_transactions,
    })
def calculate_current_month(month, year):
    current_month = re.match('\d{2}', month)
    current_year = re.match('\d{4}', year)
    return_month = datetime.date(
        int(current_year.group()), int(current_month.group()), 1)
    return return_month

私の URL.conf は次のようになります。

url(r'^transactions/(?P<month>\d{2})/(?P<year>\d{4}/$)', views.month_transactions, name='index',),

「月」と「年」は Unicode 文字列として month_transactions に入るため (年には末尾に / が付いています)、未加工の変数から新しい日付を作成するときに、型の例外が発生し続けました。

より良いアプローチはありますか; 私が見逃したPythonまたはDjangoに組み込まれているものはありますか?

ありがとう、

4

1 に答える 1

8

必要以上に物事を複雑にしています。monthandは文字列として渡されるため、 and をyear呼び出すだけで済みます。int(month)int(year)

urlconf 正規表現では、閉じ括弧が間違った場所にあるため、年には末尾のスラッシュのみが含まれます。月の}ように、の直後にある必要があります。

于 2013-07-10T15:15:23.560 に答える