0

クエリセットを使用して一連のものを取得し、それらをリストとして表示しています。これをクリックすると、選択した記事の詳細を表示できます。記事の詳細ビューには、is_creator メソッドがあります。

@login_required
def is_creator(userProfile, article):
    if userProfile == article.creator:
        return True
    else:
        return False

これで、編集ボタンを自由に表示できます。ただし、ホームページでは、クエリを作成し、タイトルを表示するための for ループを作成するテンプレートにクエリセットを直接渡すため、話は別です。ただし、現在のユーザーが作成者であるかどうかは、記事ごとに知りたいです。

そのため、モデル自体に作業を追加することを考えています。コードをどこにも複製する必要はありません。

@property
def is_creator(self,user):
    if self.creator.user == user:
        return 1
    else:
        return 0

モデルにそれを追加することで、テンプレート {% if event.is_creator user %}test{% endif %} を非常に簡単に呼び出すことができるはずだと考えていました。私が直面しているので、私は間違っているようです:

TemplateSyntaxError at /
Unused 'user' at end of if expression.

私はPHPの世界から来ているので、これはうまくいくはずですが、明らかに何か間違っています。

前もって感謝します :)

編集:次のようなクエリセットをループするビューに別の解決策があると思います:

 variables['articles'] = Event.objects.filter(
            (Q(creator=me) | Q(bringing__attendee=me)) & Q(date_start__lt=datenow) & Q(date_end__gt=datenow)
        ).order_by('-date_start')
    for article in variables['articles']:
         article.iscreator=1 (I can do some more work here)

しかし、QS をループする必要があるのは最善の考えではないようです。

4

1 に答える 1

1

非常に悲しいことですが、テンプレートからメソッドにパラメーターを渡すことはできません (実際、これは良い考えです。つまり、プレゼンテーション ロジックとモデル ロジックを混在させないでください:))。この目的のために、テンプレート タグを記述する必要があります。

https://docs.djangoproject.com/en/dev/howto/custom-template-tags/

タグは次のようになります (テストされていません):

@register.simple_tag(takes_context=True) #  assuming you are running in request context
def current_user_is_creator(context,article):
    user = context['request'].user
    return article.creator.user == user  #  dont forget to add proper checks

または、ビューで必要なデータを準備することもできます。

于 2013-04-13T21:11:02.253 に答える