шаблон django "имя файла слишком длинное" - PullRequest
0 голосов
/ 21 октября 2010

Я очень плохо знаком с Python и Django, так что, возможно, кто-то может указать мне правильное направление.

У меня есть следующая строка url.py

      url(r'^$', direct_to_template,
                  {'template':'index.html',
                  'extra_context':{'featured_actors': lambda: User.objects
                                    .annotate(avatars_nb=Count('avatar'))
                                    .filter(actor_profile__is_featured=True, avatars_nb__gt=0)
                                    .order_by('?')[:4]},
                 }, name='index'),

Все это долгое время прекрасно работало, но ни с того ни с сего я вдруг вижу, что у меня появляется ошибка шаблона.

 TemplateSyntaxError at /
 Caught an exception while rendering: (36, 'File name too long')

На линии 70

 66   {% if featured_actors|length %}
 67       <div id="featured"> 
 68         <h2>Featured Actors: </h2>
 69         <ul>
 70             {% for actor in featured_actors %}
 71             <li> 
 72                 <a href="{% url public_profile actor.username %}">
 73                     <img src="{% avatar_itself_url actor.avatar_set.all.0 200 %}" alt="{{ actor.profile.firstname }} {{ actor.profile.lastname }}" style="max-width:140px" height="200"/> 
 74                 </a>
 75             </li>
 76             {% endfor %}

Какой лучший способ отладить это?

UPDATE

 126     def avatar_url(self, size):
 127         return self.avatar.storage.url(self.avatar_name(size))

Я думаю, что нашел небольшую проблему, один из профилей пользователей также выдает ту же ошибку. Поэтому я думаю, что для него это слишком длинный путь к аватару / изображению. Я пытаюсь сузить это ...

1 Ответ

2 голосов
/ 21 октября 2010

Возможно, путь к изображению {% avatar_itself_url actor.avatar_set.all.0 200 %} слишком длинный.Можете ли вы удалить строку с помощью <img ... и посмотреть, отрисовывается ли шаблон?

Если из приведенных выше отрисовок из python manage.py shell вы можете проверить длину пути вашего изображения?Длина превышает 255 символов?

ОТВЕТ НА КОММЕНТАРИЙ

Ваш путь изображения слишком длинный, что я имею в виду:

<img src="/this/is/a/very/long/path/which/exceeds/255/characters/something.png" />

Выше не длиной 255 символов, но вы поняли.Приведенный выше путь src может быть очень длинным.Попробуйте выяснить, что это за путь, и рассчитайте его длину.Как выглядит реализация avatar_itself_url?Как насчет Unicode Avatar?Что это возвращает?Есть ли у вас аватар с очень длинным именем?

Воспроизведение ошибки msg

Вот как можно скопировать ошибку msg из python.Запустите следующее в скрипте Python:

long_filename = 'a' * 256
fp = open(long_filename, 'w')
fp.close()

Вышеприведенное должно вернуть сообщение: IOError: [Errno 36] File name too long:.

Отображение пути к изображению

Можете ли вы заменить тег img из html только его содержимым: {% avatar_itself_url actor.avatar_set.all.0 200 %}?Вместо того, чтобы видеть изображение, вы должны увидеть путь к изображению.Глазное яблоко с длиной более 256 символов не должно быть проблемой.

...