代码之家  ›  专栏  ›  技术社区  ›  KiranChavan

django上未显示图片

  •  1
  • KiranChavan  · 技术社区  · 6 年前

    我正在尝试克隆www.producthunt。当我在制作它的时候,我制作了一个模型,人们可以在我制作模型的时候上传产品的图片、标题、正文等。py,视图。py和细节。html[用户发帖后重定向到自己帖子的页面]我发现图片无法显示它有一个图像符号,就是这样! 所以,我的观点。py看起来像:

    from django.shortcuts import render, redirect, get_object_or_404
    from django.contrib.auth.decorators import login_required
    from .models import Product
    from django.utils import timezone
    
    def home(request):
        products = Product.objects
        return render(request, 'products/home.html',{'products':products})
    
    @login_required(login_url="/accounts/signup")
    def create(request):
        if request.method == 'POST':
            if request.POST['title'] and request.POST['body'] and request.POST['url'] and request.FILES['icon'] and request.FILES['image']:
                product = Product()
                product.title = request.POST['title']
                product.body = request.POST['body']
                if request.POST['url'].startswith('http://') or request.POST['url'].startswith('https://'):
                    product.url = request.POST['url']
                else:
                    product.url = 'http://' + request.POST['url']
                product.icon = request.FILES['icon']
                product.image = request.FILES['image']
                product.pub_date = timezone.datetime.now()
                product.hunter = request.user
                product.save()
                return redirect('/products/' + str(product.id))
            else:
                return render(request, 'products/create.html',{'error':'All fields are required.'})
        else:
            return render(request, 'products/create.html')
    
    def detail(request, product_id):
        product = get_object_or_404(Product, pk=product_id)
        return render(request, 'products/detail.html',{'product':product})
    

    以及细节。html看起来像:

    {% extends 'base.html' %}
    {% block content %}
    
    <div class="row">
      <div class="col-2">
        <img src="{{ product.icon.url }}" class="img-fluid" />
      </div>
      <div class="col-10">
        <a href="{{ product.url }}"><h1>{{ product.title }}</h1></a>
      </div>
    </div>
    {% endblock %}
    

    该产品的型号如下所示:

    from django.db import models
    from django.contrib.auth.models import User
    
    class Product(models.Model):
        title = models.CharField(max_length=200)
        url = models.TextField()
        pub_date = models.DateTimeField()
        votes_total = models.IntegerField(default=1)
        image = models.ImageField(upload_to='images')
        icon = models.ImageField(upload_to='images')
        body = models.TextField()
        hunter = models.ForeignKey(User, on_delete=models.CASCADE)
    
        def __str__(self):
            return self.title
    
        def summary(self):
            return self.body[:100]
    
        def pub_date_pretty(self):
            return self.pub_date.strftime('%b %d %Y')
    

    我有两个URL。py主URL。py看起来像:

    from django.contrib import admin
    from django.urls import path, include
    from products import views
    
    urlpatterns = [
        path('admin/', admin.site.urls),
        path('', views.home, name="home"),
        path('accounts/', include('accounts.urls')),
        path('products/', include('products.urls')),
    ]
    

    和/产品/URL。py看起来像:

    from django.urls import path, include
    from .import views
    
    urlpatterns = [
        path('create', views.create, name='create'),
        path('<int:product_id>/', views.detail, name='detail'),
    ]
    
    1 回复  |  直到 6 年前
        1
  •  2
  •   Christian Ravi Bhushan    3 年前

    产品偶像url返回“/媒体/图像/我的图像”。png'

    在项目url中使用此代码。py公司

    from django.conf import settings
    from django.conf.urls.static import static
    
    urlpatterns = [
        # ... the rest of your URLconf goes here ...
    ] + static(settings.MEDIA_URL, document_root=settings.MEDIA_ROOT)
    

    'http://127.0.0.1:8000/media/images/myimage.png'

    在设置中。py公司

    STATICFILES_DIRS = [
        os.path.join(BASE_DIR, 'static')
    ]
    
    
    STATIC_ROOT = os.path.join(BASE_DIR, 'static')
    STATIC_URL = '/static/'
    
    MEDIA_ROOT = os.path.join(BASE_DIR, 'media')
    MEDIA_URL = '/media/'