django模板“文件名太长”
我刚接触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 %}
调试这个问题的最好方法是什么?
更新:
126 def avatar_url(self, size):
127 return self.avatar.storage.url(self.avatar_name(size))
我想我找到了一点问题,某个用户的个人资料也出现了同样的错误。所以我觉得可能是他的头像/图片路径太长了。我正在试着进一步缩小问题范围……
1 个回答
2
可能你的图片路径 {% 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个字符长,但你大概明白我的意思。这个路径可能非常长。试着找出这个路径是什么,并计算一下它的长度。avatar_itself_url
是怎么实现的?Avatar
的unicode是什么?它返回了什么?你有没有一个名字特别长的Avatar?
重现错误信息
下面是你可以用python重现错误信息的方法。在python脚本中运行以下代码:
long_filename = 'a' * 256
fp = open(long_filename, 'w')
fp.close()
运行后应该会返回这个信息:IOError: [Errno 36] File name too long:
。
显示图片路径
你能把html中的img标签替换成它的内容吗:{% avatar_itself_url actor.avatar_set.all.0 200 %}
? 这样你就能看到图片的路径,而不是图片本身。看一下这个路径,如果超过256个字符,应该不成问题。