我有一个...
## adding a drop box
OptionList= [
'Singapore',
'London',
'Bangkok',
'Moscow'
]
city_list = StringVar(window, OptionList)
city_list.set('select the city')
observer = city_list.trace('w', lambda *_: weather()) # ADDED.
opt = tk.OptionMenu(window, city_list, *OptionList)
opt.config(width = 90, font = ('Arial', 12))
opt.pack()
...
应用,该应用的模型包含城市,县和国家/地区代码:
models.py
Django
对于每个城市,我的静态文件夹中都有一些静态图像,这些图像不会被更改(或者至少,如果需要,旧文件将被新文件覆盖,但文件名保持不变)。图片和数据库中的值之间的对应关系是通过字段'fCityCode`:
示例:
对于纽约-在数据库中保存为“ NewYork”,而我的静态文件夹中的图像文件名也相同,即“ NewYork”。
现在,我想在class AreaMap(models.Model):
Code = models.AutoField(primary_key=True)
fCityCode = models.CharField(
verbose_name='City', max_length=100)
fCountyCode = models.CharField(
verbose_name='County', max_length=100)
fCountryCode = models.CharField(
verbose_name='Country', max_length=100)
def __str__(self):
return self.fCityCode
模板中显示文件夹中与数据库值相对应的每个图像。
我已经做过一些研究,我读到静态图像比从静态文件夹中导入图像要好,而不是将图像存储在数据库中是更好的选择。有什么方法可以进行映射并使用HTML
来实现?谢谢
稍后修改
因此,我的Django
如下所示:
settings.py
我的MEDIA_URL = '/media/'
MEDIA_ROOT = os.path.join(BASE_DIR, 'media/')
如下所示:
urls.py
以上模型已根据urlpatterns = [
#other urls
]
if settings.DEBUG:
urlpatterns += static(settings.MEDIA_URL,
document_root=settings.MEDIA_ROOT)
答案进行了修改,并添加了foo-bar
构造函数:
@property
使用浏览器中的检查选项,这是照片的class AreaMap(models.Model):
Code = models.AutoField(primary_key=True)
fCityCode = models.CharField(
verbose_name='City', max_length=100)
fCountyCode = models.CharField(
verbose_name='County', max_length=100)
fCountryCode = models.CharField(
verbose_name='Country', max_length=100, default='RO')
@property
def img_url(self):
return "{}{}".format(settings.MEDIA_URL, self.fCityCode)
的样子,但是却不显示在浏览器中:
URL
答案 0 :(得分:1)
你快到了! 根据您的设置,您的目录结构应如下所示,
.
├── project_root
│ ├── settings.py
│ ├── urls.py
│ └── wsgi.py
├── manage.py
├── media
│ └── foo
└── myapp_name
├── admin.py
├── apps.py
├── __init__.py
├── migrations
│ ├── 0001_initial.py
│ └── __init__.py
├── models.py
├── templates
│ └── sample.html
├── urls.py
└── views.py
关键点是 media
目录,应放置在根目录控制器中
要在模板中渲染图像,您需要通过视图将 AreaMap
查询集传递给模板。
#myapp_name/views.py
from django.shortcuts import render
def sample_view(request):
return render(request, 'sample.html', context={'qs': AreaMap.objects.all()})
现在,将模板中的Queryset迭代(或在模板中执行任何操作),
#myapp_name/templates/sample.html
{% for item in qs %}
<p><img src="{{ item.img_url }}" width="300px"></p>
{% endfor %}
答案 1 :(得分:1)
由于此文件是固定的,不会经常更改,因此我认为它们应存储在static directory
中。现在,如果文件夹结构是这样的:
.
├── project_root
├── static
│ ├── city_images
│ ├── LA.jpg
│ ├── NewYork.jpg
│ └── Washington.jpg
├── apps
然后您的设置应如下所示:
STATICFILES_DIRS = [
os.path.join(BASE_DIR, "static"),
]
STATIC_URL = '/static/'
然后只需使用:
{% load static %}
<div class="inner-bg overlay-dark" style="background-image:url({% static 'city_images/NewYork.jpg' %};);">
或者您可以像编辑中提到的那样与模型集成:
# model
from django.templatetags.static import static
class AreaMap(models.Model):
Code = models.AutoField(primary_key=True)
fCityCode = models.CharField(
verbose_name='City', max_length=100)
fCountyCode = models.CharField(
verbose_name='County', max_length=100)
fCountryCode = models.CharField(
verbose_name='Country', max_length=100, default='RO')
@property
def img_url(self):
return static("city_images/{}".format(self.fCityCode))
# view
{% for i in areamap_objects %}
<img src="{{ i.img_url }}" >
{% endfor %}