【发布时间】:2016-06-02 06:27:39
【问题描述】:
我有这个模型:
def generate_filename(self, filename):
url = "files/users/%s/%s" % (self.user.id, filename)
return url
class Upload(models.Model):
user = modelo.ForeignKey(User, null=True)
docfile = modelo.FileField(upload_to=generate_filename)
Views.py
allfiles = Upload.objects.all()
我在 django 中有一个上传文件的列表:
<ul>
{% for item in allfiles %}
<li><a href="{{ item.docfile.url }}">{{ item.docfile.name }}</a></li>
{% endfor %}
</ul>
它在 html 上显示我的文件的完整路径:
files/users/1/test.txt
我只想显示test.txt
我试过这个:
<ul>
{% for item in arquivos %}
<li><a href="{{ item.docfile.url }}">{{ item.docfile.name.split('/')[3] }}</a></a></li>
{% endfor %}
</ul>
但我得到了Could not parse the remainder: '('/')' from 'item.docfile.name.split('/')[3]'
编辑
我尝试在myapp/templatetags/filename.py中创建一个文件:
import os
from django import template
register = template.Library()
@register.filter
def filename(value):
return os.path.basename(value.docfile.name)
在模板中:
{% load filename %}
<ul>
{% for item in allfiles %}
<li><a href="{{ item.docfile.url }}">{{ item.docfile|filename }}</a></li>
{% endfor %}
</ul>
现在我得到了这个:
'filename' is not a registered tag library. Must be one of:
admin_list
admin_modify
admin_static
admin_urls
cache
filaname
future
i18n
l10n
log
static
staticfiles
tz
【问题讨论】:
-
您不能在 django 模板中使用原始 python...
-
很抱歉,我是 django 的新手……你能说得更具体一点或举一些例子吗?
-
我只是想在不改变模型的情况下解决这个问题... :(
-
然后在副本中向下滚动。虽然选择的答案不会改变模型,但它会为其添加一个方法。