为什么我不能在网页上显示个人资料图片?

时间:2020-07-29 21:39:11

标签: html django image django-templates

我正在从项目教程中学习django,但遇到了问题。 问题是:

  Internal Server Error: /account/                                                                                                                                         
  Traceback (most recent call last):                                                                                                                                       
  File "C:\Users\user\AppData\Local\Programs\Python\Python37\lib\site- 
  packages\django\template\base.py", line 828, in _resolve_lookup                                    
  current = current[bit]                                                                                                                                               
  TypeError: 'ImageFieldFile' object is not subscriptable                                                                                                                  
                                                                                                                                                                     
  During handling of the above exception, another exception occurred:                                                                                                      
                                                                                                                                                                     
  Traceback (most recent call last):                                                                                                                                       
  File "C:\Users\user\AppData\Local\Programs\Python\Python37\lib\site- 
  packages\django\core\handlers\exception.py", line 34, in inner                                     
  response = get_response(request)                                                                                                                                     
  File "C:\Users\user\AppData\Local\Programs\Python\Python37\lib\site- 
  packages\django\core\handlers\base.py", line 115, in _get_response                                 
  response = self.process_exception_by_middleware(e, request)                                                                                                          
  File "C:\Users\user\AppData\Local\Programs\Python\Python37\lib\site- 
  packages\django\core\handlers\base.py", line 113, in _get_response                                 
  response = wrapped_callback(request, *callback_args, **callback_kwargs)                                                                                              
  File "C:\Users\user\AppData\Local\Programs\Python\Python37\lib\site- 
  packages\django\contrib\auth\decorators.py", line 21, in _wrapped_view                             
  return view_func(request, *args, **kwargs)                                                                                                                           
  File "C:\Users\user\Desktop\crm1\accounts\decorators.py", line 23, in wrapper_func                                                                                     
  return view_func(request, *args, **kwargs)                                                                                                                           
  File "C:\Users\user\Desktop\crm1\accounts\views.py", line 107, in accountSettings                                                                                      
  return render(request, 'accounts/accounts_settings.html', context)                                                                                                   
  File "C:\Users\user\AppData\Local\Programs\Python\Python37\lib\site-packages\django\shortcuts.py", 
  line 19, in render                                                  
  content = loader.render_to_string(template_name, context, request, using=using)                                                                                      
  File "C:\Users\user\AppData\Local\Programs\Python\Python37\lib\site- 
  packages\django\template\loader.py", line 62, in render_to_string                                  
  return template.render(context, request)                                                                                                                             
  File "C:\Users\user\AppData\Local\Programs\Python\Python37\lib\site- 
  packages\django\template\backends\django.py", line 61, in render                                   
  return self.template.render(context)                                                                                                                                 
  File "C:\Users\user\AppData\Local\Programs\Python\Python37\lib\site- 
  packages\django\template\base.py", line 171, in render                                             
  return self._render(context)                                                                                                                                         
  File "C:\Users\user\AppData\Local\Programs\Python\Python37\lib\site- 
  packages\django\template\base.py", line 163, in _render                                            
  return self.nodelist.render(context)                                                                                                                                 
  File "C:\Users\user\AppData\Local\Programs\Python\Python37\lib\site- 
  packages\django\template\base.py", line 936, in render                                             
  bit = node.render_annotated(context)                                                                                                                                 
  File "C:\Users\user\AppData\Local\Programs\Python\Python37\lib\site- 
  packages\django\template\base.py", line 903, in render_annotated                                   
  return self.render(context)                                                                                                                                          
  File "C:\Users\user\AppData\Local\Programs\Python\Python37\lib\site- 
  packages\django\template\loader_tags.py", line 150, in render                                      
  return compiled_parent._render(context)                                                                                                                              
  File "C:\Users\user\AppData\Local\Programs\Python\Python37\lib\site- 
  packages\django\template\base.py", line 163, in _render                                            
  return self.nodelist.render(context)                                                                                                                                 
  File "C:\Users\user\AppData\Local\Programs\Python\Python37\lib\site- 
  packages\django\template\base.py", line 936, in render                                             
  bit = node.render_annotated(context)                                                                                                                                 
  File "C:\Users\user\AppData\Local\Programs\Python\Python37\lib\site- 
  packages\django\template\base.py", line 903, in render_annotated                                   
  return self.render(context)                                                                                                                                          
  File "C:\Users\user\AppData\Local\Programs\Python\Python37\lib\site- 
  packages\django\template\loader_tags.py", line 62, in render                                       
  result = block.nodelist.render(context)                                                                                                                              
  File "C:\Users\user\AppData\Local\Programs\Python\Python37\lib\site- 
  packages\django\template\base.py", line 936, in render                                             
  bit = node.render_annotated(context)                                                                                                                                 
  File "C:\Users\user\AppData\Local\Programs\Python\Python37\lib\site- 
  packages\django\template\base.py", line 903, in render_annotated                                   
  return self.render(context)                                                                                                                                          
  File "C:\Users\user\AppData\Local\Programs\Python\Python37\lib\site- 
  packages\django\template\base.py", line 986, in render                                             
  output = self.filter_expression.resolve(context)                                                                                                                     
  File "C:\Users\user\AppData\Local\Programs\Python\Python37\lib\site- 
  packages\django\template\base.py", line 670, in resolve                                            
  obj = self.var.resolve(context)                                                                                                                                      
  File "C:\Users\user\AppData\Local\Programs\Python\Python37\lib\site- 
  packages\django\template\base.py", line 795, in resolve                                            
  value = self._resolve_lookup(context)                                                                                                                                
  File "C:\Users\user\AppData\Local\Programs\Python\Python37\lib\site- 
  packages\django\template\base.py", line 836, in _resolve_lookup                                    
  current = getattr(current, bit)                                                                                                                                      
  File "C:\Users\user\AppData\Local\Programs\Python\Python37\lib\site- 
  packages\django\db\models\fields\files.py", line 61, in url                                        
  self._require_file()                                                                                                                                                 
  File "C:\Users\user\AppData\Local\Programs\Python\Python37\lib\site- 
  packages\django\db\models\fields\files.py", line 38, in _require_file                              
  raise ValueError("The '%s' attribute has no file associated with it." % self.field.name)                                                                             
  ValueError: The 'profile_pic' attribute has no file associated with it.                                                                                                  
  [29/Jul/2020 21:48:43] "GET /account/ HTTP/1.1" 500 171347        

这是views.py:

from django.shortcuts import render, redirect
from django.http import HttpResponse
from django.forms import inlineformset_factory
from django.contrib.auth.forms import UserCreationForm
from django.views.decorators.csrf import csrf_exempt

from django.contrib.auth import authenticate, login, logout

from django.contrib import messages

from django.contrib.auth.decorators import login_required
from django.contrib.auth.models import Group


from .models import *
from .forms import OrderForm, CreateUserForm, CustomerForm
from .filters import OrderFilter
from .decorators import unauthenticated_user, allowed_users, admin_only 
# Create your views here.



@csrf_exempt
@unauthenticated_user
def registerPage(request):
    form = CreateUserForm()
    if request.method == 'POST':
        form = CreateUserForm(request.POST)
        if form.is_valid():
            user = form.save()
            username = form.cleaned_data.get('username') # to get the username data

            group = Group.objects.get(name='customer')
            user.groups.add(group)
            Customer.objects.create(
                user=user,
                name=user.username,)

            messages.success(request, 'Account was created for ' + username)

            return redirect('accounts:login')

    context = {'form':form}
    return render(request, 'accounts/register.html', context)


@csrf_exempt
@unauthenticated_user # decorators.py
def loginPage(request):
    if request.method == 'POST':
        username = request.POST.get('username')
        password = request.POST.get('password')

        user = authenticate(request, username=username, password=password)
        if user is not None:
            login(request, user)
            return redirect('accounts:home')
        else:
            messages.info(request, 'Username OR password is incorrect')

    context = {}
    return render(request, 'accounts/login.html', context)


def logoutUser(request):
    logout(request)
    return redirect('accounts:login')


@login_required(login_url='accounts:login') # cant go to home page without logging in #important
@admin_only
def home(request):
    orders = Order.objects.all()
    customers = Customer.objects.all()

    total_customers = customers.count()
    total_orders = orders.count() # or Order.objects.all() 
    delivered = orders.filter(status='Delivered').count()
    pending = orders.filter(status='Pending').count()

    context = {'orders':orders, 'customers':customers, 'total_customers':total_customers, 'total_orders':total_orders, 'delivered':delivered, 'pending':pending}
    return render(request, 'accounts/dashboard.html', context)


@login_required(login_url='accounts:login')
@allowed_users(allowed_roles=['customer'])
def userPage(request):
    orders = request.user.customer.order_set.all()

    total_orders = orders.count() # or Order.objects.all() 
    delivered = orders.filter(status='Delivered').count()
    pending = orders.filter(status='Pending').count()

    print('ORDERS:', orders)

    context = {'orders':orders, 'total_orders':total_orders, 'delivered':delivered, 'pending':pending}
    return render(request, 'accounts/user.html', context)



@login_required(login_url='login')
@allowed_users(allowed_roles=['customer'])
def accountSettings(request):
    user = request.user 
    form = CustomerForm(instance=user)s
    context = {'form':form}
    return render(request, 'accounts/accounts_settings.html', context)



@login_required(login_url='accounts:login')
@allowed_users(allowed_roles=['admin']) # which users to allowed in home page (admin path)
def products(request):
    products = Product.objects.all()

    return render(request, 'accounts/products.html', {'products':products})


@login_required(login_url='accounts:login')
@allowed_users(allowed_roles=['admin'])
def customer(request, pk_test):
    customer = Customer.objects.get(id=pk_test)

    orders = customer.order_set.all()
    order_count = orders.count()

    myFilter = OrderFilter(request.GET, queryset=orders)
    orders = myFilter.qs

    context = {'customer':customer, 'orders':orders, 'order_count':order_count, 'myFilter':myFilter}
    return render(request, 'accounts/customer.html', context)


@login_required(login_url='accounts:login')
@allowed_users(allowed_roles=['admin'])
def createOrder(request, pk):
    OrderFormSet = inlineformset_factory(Customer, Order, fields=('product', 'status'), extra=10)
    customer = Customer.objects.get(id=pk)
    formset = OrderFormSet(queryset=Order.objects.none(),instance=customer)
    #form = OrderForm(initial={'customer':customer})
    if request.method == 'POST':
        #print('Printing POST:', request.POST)
        #form = OrderForm(request.POST)
        formset = OrderFormSet(request.POST, instance=customer)
        if formset.is_valid():
            formset.save()
            return redirect('/')

    context = {'formset':formset}
    return render(request, 'accounts/order_form.html', context)


@login_required(login_url='accounts:login')
@allowed_users(allowed_roles=['admin'])
def updateOrder(request, pk):

    order = Order.objects.get(id=pk)
    form = OrderForm(instance=order)

    if request.method == 'POST':
        form = OrderForm(request.POST, instance=order)
        if form.is_valid():
            form.save()
            return redirect('/')

    context = {'form':form}
    return render(request, 'accounts/order_form.html', context)


@login_required(login_url='accounts:login')
@allowed_users(allowed_roles=['admin'])
def deleteOrder(request, pk):
    order = Order.objects.get(id=pk)
    if request.method == 'POST':
        order.delete()
        return redirect('/')

    context = {'item':order}
    return render(request, 'accounts/delete.html', context)

这是models.py:

from django.db import models
from django.contrib.auth.models import User

# Create your models here.

class Customer(models.Model):
    user = models.OneToOneField(User, null=True, on_delete=models.CASCADE) # one to one relationship/ user-customer/ on_delete =  when a user is delete, the customer is deleted too.
    name = models.CharField(max_length=200, null=True)
    phone = models.CharField(max_length=200, null=True)
    email = models.CharField(max_length=200, null=True)
    profile_pic = models.ImageField(null=True, blank=True)
    data_created = models.DateTimeField(auto_now_add=True, null=True)


    def __str__(slef):
        return slef.name



class Tag(models.Model):
    name = models.CharField(max_length=200, null=True)

    def __str__(slef):
        return slef.name



class Product(models.Model):
    CATEGORY = (
        ('Indoor', 'Indoor'),
        ('Out Door', 'Out Door'),
        )

    name = models.CharField(max_length=200, null=True)
    price = models.FloatField(null=True)
    category = models.CharField(max_length=200, null=True, choices=CATEGORY)
    description = models.CharField(max_length=200, null=True, blank=True)
    date_created = models.DateTimeField(auto_now_add=True, null=True)
    tags = models.ManyToManyField(Tag)

    def __str__(slef):
        return slef.name

    @property
    def image_url(self):
        if self.image and hasattr(self.image, 'url'):
            return self.image.url






class Order(models.Model):
    STATUS = (
        ('Pending', 'Pending'),
        ('Out of delivery', 'Out of delivery'),
        ('Delivered', 'Delivered'),
        )

    customer = models.ForeignKey(Customer, null=True, on_delete=models.SET_NULL) # Database Relationships | One To Many & Many to Many
    product = models.ForeignKey(Product, null=True, on_delete=models.SET_NULL) # Database Relationships | One To Many & Many to Many
    date_created = models.DateTimeField(auto_now_add=True, null=True)
    status = models.CharField(max_length=200, null=True, choices=STATUS)
    note = models.CharField(max_length=1000, null=True)


    def __str__(slef):
        return slef.product.name

这是account_settings.html:

{%  extends 'accounts/main.html' %}
{% load static %}
{% block content %}

<style>
    .profile-pic{
        max-width: 200px;
        max-height:200px;
        margin: 0 auto; 
        border-radius: 50%;
    }
</style>

<br>
<div class="row">
    <div class="col-md-3">
        <div class="card card-body">
            <a class="btn btn-warning" href="{% url 'accounts:home' %}"> &#8592; Back to Profile</a>
            <hr>
            <h3 style="text-align: center">Account Settings</h3>
            <hr>
            <img class="profile-pic" src="{{request.user.customer.profile_pic.url}}" >
        
        </div>
    </div>
    <div class="col-md-9">
        <div class="card card-body">
            
            <form method="POST" action="" enctype="multipart/form-data">
                {% csrf_token %}
                {{form.as_p}}
        
            <input class="btn btn-primary" type="submit" name="Update Information">
            </form>
        </div>
    </div>
</div>



{% endblock %}

我认为问题出在account_settings.html模板中。 在这一行:<img class="profile-pic" src="{{request.user.customer.profile_pic.url}}" > 当我删除“ .url”时,显示模板,但没有个人资料图片。

0 个答案:

没有答案
相关问题