模特:
db.define_table('files',
Field('course_id', 'reference course'),
Field('documentx_filename',unique=True),
Field('documentx','upload'))
控制器:
def show_doc():
rows = db( (db.course.id == db.files.course_id) & (db.dept.id==db.course.dept_id) ).select()
return dict(rows=rows)
def create_doc():
form = SQLFORM(db.files).process(next=URL('show_doc'))
if request.vars.documentx != None:
form.vars.documentx_filename = request.vars.documentx.filename
if form.process().accepted:
response.flash = 'form accepted'
elif form.errors:
response.flash = 'form has errors'
else :
response.flash = 'something still went wrong'
return dict(form = form)
查看show_doc的文件:
<div><a href={{=URL('default', 'download', args=row.files.documentx)}}> file = {{=row.files.documentx_filename}}</a></div>
<br />
{{pass}}
现在,如果我将文件名放在“documentx_filename”字段中,则会显示文件名。
但是,如果我没有将该名称放在“documentx_filename”字段中并将其留空但是上传文件。 它应该复制上传文件的名称,如在控制器create_doc中我放了if语句,但它确实这样做了吗?
答案 0 :(得分:2)
您可以将原始文件名存储在模型中(http://www.web2py.com/book/default/chapter/07#Storing-the-original-filename)
但是,假设您拥有与此帖相同的模型:How can I join 3 tables and output all three together joined in web2py? 我会在模型定义中添加一个“标题”字段:
db.define_table('files',
Field('title', unique=True, requires=IS_NOT_EMPTY()),
Field('course_id', 'reference course'),
Field('documentx','upload'))
然后,在您的视图中,您可以写:
{{for row in rows:}}
<div><a href={{=URL('default', 'download', args=row.files.documentx)}}>row.files.title</a></div>
{{pass}}