编辑:创建zip文件并将其添加到我的zip_press_kit
字段中的代码确实有效,但是我仍然无法获得将其下载到模板中的网址(请参见点4和5看看有什么附加内容
1)我有一个模型:
class Book(models.Model):
...
press_kit = models.FileField(upload_to='press_kit/',
verbose_name="Dossier de presse",
blank=True,
null=True,
default=None)
high_res_cover = models.ImageField(upload_to='high_res_covers/',
verbose_name="Couverture HD",
blank=True)
zip_press_kit = models.FileField(upload_to='zips/',
blank=True,
null=True)
我刚刚给出了我感兴趣的领域。
因此,当我将我的新Book对象保存在django-admin中时,我想检查自己是否有high_res_cover
或press_kit
,如果有,请创建一个zip_press_kit
包含high_res_cover
和/或press_kit
的文件。
2)我有一个保存方法:
def save(self, *args, **kwargs):
zip_file_name = f"{slugify(f'{self.title}-{self.id}')}.zip"
if self.high_res_cover or self.press_kit:
with ZipFile(f'{MEDIA_ROOT}zips/{zip_file_name}', 'w') as zip_file:
if self.high_res_cover:
zip_file.write(f'{MEDIA_ROOT}{self.high_res_cover}', os.path.basename(f'{MEDIA_ROOT}/{self.high_res_cover}'))
if self.press_kit:
zip_file.write(f'{MEDIA_ROOT}{self.press_kit}', os.path.basename(f'{MEDIA_ROOT}/{self.press_kit}'))
self.zip_press_kit = File(open(f'{MEDIA_ROOT}/zips/{zip_file_name}', 'rb'))
os.remove(f'{MEDIA_ROOT}/zips/{zip_file_name}')
else:
self.zip_press_kit = None
super(Book, self).save(*args, **kwargs)
当我的书已经存在并且我在其上调用save时,此代码有效,但是当我想在模板中获取文件的URL时,我得到的内容类似于'localhost:8000 / Users / me / Desktop / ProjectFIle ... /'。
3)项目树:
.
├── Entremonde
│ ├── __init__.py
│ ├── __pycache__
│ │ ├── __init__.cpython-37.pyc
│ │ ├── settings.cpython-37.pyc
│ │ ├── urls.cpython-37.pyc
│ │ └── wsgi.cpython-37.pyc
│ ├── settings.py
│ ├── urls.py
│ └── wsgi.py
├── Pipfile
├── Pipfile.lock
├── __pycache__
│ └── manage.cpython-37.pyc
├── books
│ ├── __init__.py
│ ├── __pycache__
│ │ ├── __init__.cpython-37.pyc
│ │ ├── admin.cpython-37.pyc
│ │ ├── apps.cpython-37.pyc
│ │ ├── models.cpython-37.pyc
│ │ ├── urls.cpython-37.pyc
│ │ └── views.cpython-37.pyc
│ ├── admin.py
│ ├── apps.py
│ ├── management
│ │ ├── __init__.py
│ │ ├── __pycache__
│ │ │ └── __init__.cpython-37.pyc
│ │ └── commands
│ │ ├── __init__.py
│ │ ├── __pycache__
│ │ │ ├── __init__.cpython-37.pyc
│ │ │ └── books_init.cpython-37.pyc
│ │ └── books_init.py
│ ├── migrations
│ │ ├── 0001_initial.py
│ │ ├── 0002_book_display.py
│ │ ├── __init__.py
│ │ └── __pycache__
│ │ ├── 0001_initial.cpython-37.pyc
│ │ └── __init__.cpython-37.pyc
│ ├── models.py
│ ├── static
│ │ └── books
│ │ └── js
│ ├── templates
│ │ └── books
│ │ ├── authors.html
│ │ ├── book.html
│ │ └── catalogue.html
│ ├── tests.py
│ ├── urls.py
│ └── views.py
├── contacts
│ ├── __init__.py
│ ├── __pycache__
│ │ ├── __init__.cpython-37.pyc
│ │ ├── admin.cpython-37.pyc
│ │ ├── apps.cpython-37.pyc
│ │ ├── models.cpython-37.pyc
│ │ ├── urls.cpython-37.pyc
│ │ └── views.cpython-37.pyc
│ ├── admin.py
│ ├── apps.py
│ ├── migrations
│ │ ├── 0001_initial.py
│ │ ├── 0002_contact_postal_code.py
│ │ ├── __init__.py
│ │ └── __pycache__
│ │ ├── 0001_initial.cpython-37.pyc
│ │ ├── 0002_contact_postal_code.cpython-37.pyc
│ │ └── __init__.cpython-37.pyc
│ ├── models.py
│ ├── templates
│ │ └── contacts
│ │ ├── contacts.html
│ │ └── esapce-pro.html
│ ├── tests.py
│ ├── urls.py
│ └── views.py
├── db.json
├── manage.py
├── media
│ ├── covers
│ │ ├── ...
│ │ └── 25RUPTURE-Couverture_fisher_600px_web.jpg
│ ├── ebooks
│ ├── high_res_covers
│ │ └── HDj_tschichold-nouvelle_typo-couv.jpg
│ ├── posters_events
│ ├── press_kit
│ │ ├── ...
│ │ └── DPentremonde-dossierdepresse_fisher-2.pdf
│ └── zips
│ └── le-realisme-capitaliste-none.zip
├── news
│ ├── __init__.py
│ ├── __pycache__
│ │ ├── __init__.cpython-37.pyc
│ │ ├── admin.cpython-37.pyc
│ │ ├── apps.cpython-37.pyc
│ │ ├── models.cpython-37.pyc
│ │ ├── urls.cpython-37.pyc
│ │ └── views.cpython-37.pyc
│ ├── admin.py
│ ├── apps.py
│ ├── migrations
│ │ ├── 0001_initial.py
│ │ ├── __init__.py
│ │ └── __pycache__
│ │ ├── 0001_initial.cpython-37.pyc
│ │ └── __init__.cpython-37.pyc
│ ├── models.py
│ ├── templates
│ │ └── news
│ │ └── rencontres.html
│ ├── tests.py
│ ├── urls.py
│ └── views.py
├── static
│ ├── css
│ │ ├── authors.css
│ │ ├── elements.css
│ │ ├── entremonde-style.css
│ │ ├── font.css
│ │ └── style.css
│ └── js
│ ├── author.js
│ └── script.js
└── templates
└── base.html
4)如何在模板中导入网址(也尝试过book.zip_press_kit.url
):
<div id="press-kits">
{% for book in books_with_press_kit %}
<a href="{{ book.zip_press_kit }}" class="e-font-large">{{ book.title }}</a><br>
{% endfor %}
</div>
5)我单击链接后会得到什么:
找不到页面(404) 请求方法:GET 请求网址:http://localhost:8000/Users/pshop/Desktop/Entremonde/media/zips/le-realisme-capitaliste-2_QAeRykR.zip