ohi*_*hid 3 django templates image django-models
Template error:
Run Code Online (Sandbox Code Playgroud)
在模板 D:\virtualEnv\alumni\member\templates\member\index.html 中,第 15 行出错
The 'photo' attribute has no file associated with it. 5 : <!-- Albums -->
6 : <div class="row">
7 : <div class="col-sm-12">
8 : <h3>{{ user.username }}'s Albums</h3>
9 : </div>
10 : {% if all_persons %}
11 : {% for person in all_persons %}
12 : <div class="col-sm-4 col-lg-2">
13 : <div class="thumbnail">
14 : <a href="{% url 'member:detail' person.id %}">
15 : <img src=" {{ person.photo.url }} " class="img-responsive">
16 : </a>
17 : <div class="caption">
18 : <h2>{{ person.name }}</h2>
19 : <h4>{{ person.category }}</h4>
20 :
21 : <!-- View Details -->
22 : <a href="{% url 'member:detail' person.id %}" class="btn btn-primary btn-sm" role="button">View Details</a>
23 :
24 :
25 :
Run Code Online (Sandbox Code Playgroud)
追溯:
_resolve_lookup 885 中的文件“D:\virtualEnv\lib\site-packages\django\template\base.py”。current = current[bit]
在处理上述异常('ImageFieldFile'对象不可下标)时,又发生了一个异常:
文件 "D:\virtualEnv\lib\site-packages\django\core\handlers\exception.py" in internal 39. response = get_response(request)
文件“D:\virtualEnv\lib\site-packages\django\core\handlers\base.py” in _get_response 217. response = self.process_exception_by_middleware(e, request)
_get_response 215 中的文件“D:\virtualEnv\lib\site-packages\django\core\handlers\base.py”。 response = response.render()
渲染 109 中的文件“D:\virtualEnv\lib\site-packages\django\template\response.py”。 self.content = self.rendered_content
文件“D:\virtualEnv\lib\site-packages\django\template\response.py”在render_content 86. content = template.render(context, self._request)
渲染 66 中的文件“D:\virtualEnv\lib\site-packages\django\template\backends\django.py”。返回 self.template.render(context)
渲染 208 中的文件“D:\virtualEnv\lib\site-packages\django\template\base.py”。返回 self._render(context)
_render 199 中的文件“D:\virtualEnv\lib\site-packages\django\template\base.py”。返回 self.nodelist.render(context)
渲染 994 中的文件“D:\virtualEnv\lib\site-packages\django\template\base.py”。bit = node.render_annotated(context)
文件“D:\virtualEnv\lib\site-packages\django\template\base.py”在render_annotated 961.return self.render(context)
渲染 61 中的文件“D:\virtualEnv\lib\site-packages\django\template\loader_tags.py”。result = self.nodelist.render(context)
渲染 994 中的文件“D:\virtualEnv\lib\site-packages\django\template\base.py”。bit = node.render_annotated(context)
文件“D:\virtualEnv\lib\site-packages\django\template\base.py”在render_annotated 961.return self.render(context)
渲染 323 中的文件“D:\virtualEnv\lib\site-packages\django\template\defaulttags.py”。返回 nodelist.render(context)
渲染 994 中的文件“D:\virtualEnv\lib\site-packages\django\template\base.py”。bit = node.render_annotated(context)
文件“D:\virtualEnv\lib\site-packages\django\template\base.py”在render_annotated 961.return self.render(context)
渲染 217.nodelist.append(node.render_annotated(context)) 中的文件“D:\virtualEnv\lib\site-packages\django\template\defaulttags.py”
文件“D:\virtualEnv\lib\site-packages\django\template\base.py”在render_annotated 961.return self.render(context)
渲染 1044 中的文件“D:\virtualEnv\lib\site-packages\django\template\base.py”。 output = self.filter_expression.resolve(context)
文件“D:\virtualEnv\lib\site-packages\django\template\base.py”在解析 711.obj = self.var.resolve(context)
文件“D:\virtualEnv\lib\site-packages\django\template\base.py”在解析 852.value = self._resolve_lookup(context)
_resolve_lookup 893 中的文件“D:\virtualEnv\lib\site-packages\django\template\base.py”。current = getattr(current, bit)
_get_url 中的文件“D:\virtualEnv\lib\site-packages\django\db\models\fields\files.py” 68. self._require_file()
File "D:\virtualEnv\lib\site-packages\django\db\models\fields\files.py" in _require_file 46. raise ValueError("'%s' 属性没有与之关联的文件。" % self.字段名)
异常类型:ValueError at / 异常值:“照片”属性没有与之关联的文件。
我的观点:
class IndexView(generic.ListView):
template_name = 'member/index.html'
context_object_name = 'all_persons'
def get_queryset(self):
return Person.objects.all()
class DetailView(generic.DetailView):
model = Person
template_name = 'member/detail.html'
class AlbumCreate(CreateView):
model = Person
fields = '__all__'
Run Code Online (Sandbox Code Playgroud)
我的模型是:
class Person(models.Model):
name = models.CharField(max_length=128)
present_position=models.CharField(max_length=100)
organization= models.CharField(max_length=150,blank=True)
address = models.CharField(max_length=150, blank=True)
tele_land = models.CharField(max_length=15,blank=True)
tele_cell = models.CharField(max_length=15, blank=True)
email = models.EmailField(max_length=70, blank=True, null=True, unique=True)
photo= models.ImageField(upload_to='persons/%Y/%m/%d/',max_length=70, blank=True )
category = models.ForeignKey('Membership', on_delete=models.CASCADE)
def get_absolute_url(self):
return reverse('member:detail', kwargs={'pk': self.pk})
class Membership(models.Model):
category = models.CharField(max_length=50, blank=False)
Run Code Online (Sandbox Code Playgroud)
网址:
from . import views
app_name = 'member'
urlpatterns = [
url(r'^$', views.IndexView.as_view(), name='index'),
url(r'^(?P<pk>[0-9]+)/$', views.DetailView.as_view(), name='detail'),
url(r'member/add/$', views.AlbumCreate.as_view(), name='member-add'),
]
Run Code Online (Sandbox Code Playgroud)
详细模板:
<div class="col-sm-4 col-md-3">
<div class="panel panel-default">
<div class="panel-body">
<a href="{% url 'member:detail' person.id %}">
{% if member.photo %}
<img src="{{ member.photo.url }}" class="img-responsive">
{% else %}
<h3>No image to display</h3>
{% endif %}
</a>
<p>{{member.name}}</p>
<p>{{member.present_position}}</p>
<p>{{member.organization}}</p>
<p>{{member.address}}</p>
<p>{{member.tele_land}}</p>
<p>{{member.tele_cell}}</p>
<p>{{member.email}}</p>
</div>
</div>
</div>
Run Code Online (Sandbox Code Playgroud)
项目网址:
from django.conf.urls import url, include
from django.contrib import admin
from django.conf import settings
from django.conf.urls.static import static
from member import urls as member_urls
urlpatterns = [
url(r'^admin/', admin.site.urls),
url(r'^', include(member_urls, namespace="member")),
]
if settings.DEBUG:
urlpatterns += static(settings.STATIC_URL, document_root=settings.STATIC_ROOT)
urlpatterns += static(settings.MEDIA_URL, document_root=settings.MEDIA_ROOT)
Run Code Online (Sandbox Code Playgroud)
为什么照片字段会出现这些错误?
我在模型中使用 Stackoverflow 的答案解决了这个问题:
@property
def photo_url(self):
if self.photo and hasattr(self.photo, 'url'):
return self.photo.url
Run Code Online (Sandbox Code Playgroud)
在模板中,使用 default_if_none 作为默认 url:
<img src="{{ person.photo_url|default_if_none:'#' }}" />
Run Code Online (Sandbox Code Playgroud)
经过多次搜索和多次使用,这实际上为我提供了正确的答案。
希望它能帮助其他人在 django 模板中加载图像。
| 归档时间: |
|
| 查看次数: |
12367 次 |
| 最近记录: |