2010-10-05 18 views
8

Estoy tratando de llamar a un método en un modelo desde una plantilla y he llegado a la conclusión de que esto no se puede hacer.Llamar a un método en un modelo desde una plantilla

Este es mi código

{% if request.user.is_authenticated %} 
    {% if a_story.is_story_liked(request.user.id) %} 
    <a class="story_like" data-id="{{ a_story.id }}" href="#">Like</a> 
    {% endif %} 
    {% else %} 
    <a class="story_like_login" data-id="{{ a_story.id }}" href="#">Like</a> 
{% endif %} 

El error se produce en la segunda línea. "is_story_liked" comprueba si el usuario ha "querido" una historia o no. De lo contrario, escribiría la misma etiqueta de anclaje pero con una clase diferente.

Estoy un poco confundido con este. Estoy tratando de dar salida a diferentes nombres de clase: si el usuario está conectado, si el usuario no está conectado y si el usuario ha "querido" o no "me gusta" un artículo/historia.

Respuesta

21

Las llamadas a métodos en plantillas django funcionan solo si no tienen un argumento (por ejemplo, {% if request.user.is_authenticated %}). Deberá colocar esa funcionalidad en la vista que representa esta plantilla o poner esta funcionalidad en custom template tag.

+0

Gracias por la sugerencia ... las etiquetas de plantilla funcionan muy bien en este escenario. – iJK

+0

user.is_authenticated es en realidad un atributo y no un método. https://docs.djangoproject.com/en/2.0/ref/contrib/auth/#django.contrib.auth.models.User.is_authenticated – makerGeek

Cuestiones relacionadas