Я пытаюсь сделать клон сайта www.producthunt.com, и пока я работал над ним, я создал модель, с помощью которой люди могут загружать изображение продукта и название, текст и т. Д. Пока я создавал models.py, views.py и detail.html [Страница, на которой пользователь перенаправляется на свой пост после публикации] Я обнаружил, что картинка не может быть отображена, на ней есть символ изображения, и все!
Итак, мой views.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})
И detail.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')
У меня есть два urls.py, основной файл urls.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')),
]
А / products / urls.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'),
]