hln*_*hln 11 python django templates image
有人可以帮我解决这个问题:我有一个Django项目,
在settings.py中
MEDIA_ROOT = 'C:/Users/hl/workspace/beer/media'
MEDIA_URL = '/media/'
STATICFILES_DIRS = (
'C:/Users/hl/workspace/beer/media'
)
Run Code Online (Sandbox Code Playgroud)
并在models.py中
image1= models.ImageField(upload_to=settings.MEDIA_ROOT)
Run Code Online (Sandbox Code Playgroud)
并在url.py
(r'^media/(?P<path>.*)$', 'django.views.static.serve',{'document_root': settings.MEDIA_ROOT}),
Run Code Online (Sandbox Code Playgroud)
在视图中
def allBeer(request):
beers=Beer.objects.all().order_by("name")
context={'beers': beers}
return render_to_response('AllBeers.html',context,context_instance=RequestContext(request))
Run Code Online (Sandbox Code Playgroud)
并在HTML中
{%for beer in beers %}
<p>
<a href="/beers/{{beer.slug}}/">
<img scr="{{beer.image1.url}}">{{beer}}
</a>
</p>
{% endfor%}
Run Code Online (Sandbox Code Playgroud)
加载图像没有问题,但图像不会显示在html文件中.我已经从互联网上搜索和阅读了很多,但我仍然无法弄清楚.
谁能告诉我为什么?
image1= models.ImageField(upload_to=images)
from django.conf.urls import patterns, include, url
from django.conf.urls.static import static
from django.contrib import admin
from django.contrib.staticfiles.urls import staticfiles_urlpatterns
from project_name import settings
admin.autodiscover()
urlpatterns = patterns('',
...........
) + static(settings.MEDIA_URL, document_root=settings.MEDIA_ROOT)
urlpatterns += staticfiles_urlpatterns()
<img src="{{MEDIA_URL}}{{beer.image1}}">
Run Code Online (Sandbox Code Playgroud)
settings.py
import os
PROJECT_ROOT = os.path.join(os.path.dirname(__file__), '..')
SITE_ROOT = PROJECT_ROOT
MEDIA_ROOT = os.path.join(SITE_ROOT, 'media')
MEDIA_URL = '/media/'
STATIC_ROOT = os.path.join(SITE_ROOT, 'static')
STATIC_URL = '/static/'
STATICFILES_DIRS = (
# Put strings here, like "/home/html/static" or "C:/www/django/static".
# Always use forward slashes, even on Windows.
os.path.join(SITE_ROOT, 'staticfiles'),
)
TEMPLATE_DIRS = (
# Put strings here, like "/home/html/django_templates" or "C:/www/django/templates".
# Always use forward slashes, even on Windows.
# Don't forget to use absolute paths, not relative paths.
os.path.join(SITE_ROOT, 'templates'),
)
Run Code Online (Sandbox Code Playgroud)
小智 7
按照以下步骤在 Django 模板上加载图像:
\n \nMEDIA_ROOT = os.path.join(BASE_DIR, \'media\')\nMEDIA_URL = \'/media/\'\nRun Code Online (Sandbox Code Playgroud)\n在项目根目录下创建一个名为\xe2\x80\x9cmedia\xe2\x80\x9d的文件夹,这意味着该文件夹将与您的应用程序处于同一级别
\n将这些添加到您的主 urls.py
\nfrom . import views, settings\nfrom django.contrib.staticfiles.urls import static\n\nurlpatterns = [\n # ... the rest of your path goes here ...\n] + static(settings.MEDIA_URL, document_root=settings.MEDIA_ROOT)\nRun Code Online (Sandbox Code Playgroud)\n \nphoto = models.ImageField(upload_to="gallery")\nRun Code Online (Sandbox Code Playgroud)\n如果要从上下文对象动态加载,请使用类似于以下的语法:
\n \nimg src="{{ obj1.photo.url }}"\nRun Code Online (Sandbox Code Playgroud)\n如果静态加载,当文件名已确定时,请使用:
\nimg src="/media/project_name/photo.png"\nRun Code Online (Sandbox Code Playgroud)\n
您搞砸src了图像的属性。应该只是-
<img src="{{beer.image1.url}}" /> <!-- from the media url -->
Run Code Online (Sandbox Code Playgroud)
不要在末尾添加任何内容-django知道从中提供图像的URL-这就是模型上的ImageField所做的。
我不知道您的url conf实际上有什么问题,但是文档中建议的模式是-
from django.conf import settings
from django.conf.urls.static import static
urlpatterns = patterns('',
# ... the rest of your URLconf goes here ...
) + static(settings.MEDIA_URL, document_root=settings.MEDIA_ROOT)
Run Code Online (Sandbox Code Playgroud)