Я пишу приложение, которое будет отслеживать серию матчей между 2 игроками. Я использую модель Django User
и расширяю ее своими UserProfile
.Не удается получить тег шаблона django для возврата unicode
Я храню имена пользователей в User
как их steamID (например: 76561197965801299
), а затем просматривают имя своего парольного имени при входе в систему и обновляют UserProfile
.
Вместо того, чтобы смотреть на 76561197965801299
, я хочу посмотреть имя пользователя, и на одной странице я хочу украсить это имя пользователя большим количеством положительных героев, поэтому я написал шаблонный тег.
Проблема:
Я не могу напечатать Юникода данные из моего шаблона тега.
Фактическая ошибка:
'ascii' codec can't encode character u'\u260e' in position 16: ordinal not in range(128)
Обычно Джанго не беспокоит меня вопросами Юникода (например: Я могу видеть это юникод объект в страницах администрирования не проблема), но я никогда не пробовал применять тег шаблона, поэтому, очевидно, что-то я делаю неправильно здесь.
шаблон/лестницы/match_game_listing.html
{{ match.challengee|steam_name }}
match.challengee
в этом случае 76561197971597000
.
лестница/templatetags/ladder_filters.py
from django import template
from django.contrib.auth.models import User
from django.core.exceptions import ObjectDoesNotExist
from django.utils.html import mark_safe
from cafe.models import UserProfile
register = template.Library()
@register.filter()
def steam_name(name):
try:
user_obj = User.objects.get(username=name)
user_prof = UserProfile.objects.get(user_id=user_obj.id)
url = user_prof.url
handle = unicode(user_prof.handle)
avatar = user_prof.avatar
steam_string = "<a href='{0}' alt='{1}\'s profile'><img src='{2}' alt='{1}\'s avatar' >{1}</a>".format(url, handle, avatar)
return mark_safe(steam_string)
# Non-steam entities can exist, ignore
except ObjectDoesNotExist:
return name
Когда я иду, чтобы просмотреть в браузере, я получаю вышеупомянутую ошибку:
UnicodeEncodeError at /ladder/dota2/ 'ascii' codec can't encode character u'\u260e' in position 16: ordinal not in range(128)
С полезным намеком:
Unicode error hint
The string that could not be encoded/decoded was: oose ☎
Я пробовал просматривать Django docs num и я пробовал играть с force_text()
безрезультатно, но поскольку я немного неясен, почему это не работает, я мог бы просто пропустить соответствующий раздел. Этот тег шаблона работает в тех случаях, когда имя не имеет юникода.
ли http://stackoverflow.com/q/3828723/165603 помощь? – okm