我在我的Django应用程序(在其他地方维护)中使用了一些第三方模板标签,它返回一个用户名作为我可以在我的模板中访问的字符串。
{% for user in gr.user.foll.list %}
{{user}}
麻烦是因为{{user}}作为字符串返回 - 我需要转换为Django用户对象,如果它存在于Django DB中,或者设置varible unRegistered如果不是这样我可以做的事情如下: / p>
{ user.get_profile.about }} # get profile information
所以我想我会写第一个Django模板标签,所以我可以像这样使用它:
{% webapp_user_lookup user %} # my custom tag
{% ifnot unRegistered %}
{{ user.get_profile.about }} # get profile information - would fail with a string
{% endifnot %}
{% endfor %}
我在其他地方用来在视图中查找用户的代码是:
try:
user = User.objects.get(username__iexact=user)
unRegistered = False
if not other_user.is_active:
unRegistered = True
except:
unRegistered = True
然而,在查看Django Template标签示例时,我无法理解如何最好地构建自定义模板标记,获取我的字符串用户名 - 并将结果作为对象发回(如果存在),或者设置变量如果不存在和原始字符串。我真的想更好地理解结构是如何工作的,如果我需要一个“类”,如果需要,为什么呢? (我是编程新手。)
答案 0 :(得分:3)
使用模板过滤器,如下所示:
{{username|get_user}}
你的user_template_tags.py中的:
from django import template
from django.contrib.auth.models import User
register = template.Library()
########################
def get_user(username):
try:
user = User.objects.get(username__iexact=username)
except User.DoesNotExist:
user = User.objects.none()
return user
register.filter('get_user',get_user)
然后在您的模板中,您可以执行以下操作:
{% with username|getuser as user %}
{% if user %}DO USER STUFF
{% else %}DO UNREGISTERED STUFF
{% endif %}
{% endwith %}