Почему изображение не появляется в шаблоне, когда я запускаю Django
- Элемент списка Пробовал несколько способов всеми доступными способами показать изображение в шаблоне, но оно не появилось, а в django - админке добавить и показать
- Элемент списка Пробовал несколько способов всеми доступными способами показать изображение в шаблоне, но оно не появилось, а в django - admin add and show
modles.py
class Delivery(models.Model):
# order = models.ForeignKey(Order, on_delete=models.CASCADE)
ddesign = models.CharField(max_length=50,null=True)
buyer = models.ForeignKey(Buyer, on_delete=models.CASCADE, null=True)
dcolor = models.CharField(max_length=50,null=True)
courier_name = models.CharField(max_length=120)
frist_name = models.CharField(max_length=120,null=True)
scand_name = models.CharField(max_length=120,null=True)
therd_name = models.CharField(max_length=120,null=True)
ford_name = models.CharField(max_length=120,null=True)
fifth_name = models.CharField(max_length=120,null=True)
dimg = models.ImageField(null=True, blank=True ,upload_to='media/')
created_date = models.DateField(auto_now_add=True)
def __str__(self):
return self.ddesign
forms.py
> class DeliveryForm(forms.ModelForm):
> class Meta:
> model = Delivery
> fields = '__all__'
>
> widgets = {
>
> 'ddesign': forms.TextInput(attrs={
> 'class': 'form-control', 'id': 'ddesign'
> }),
> 'buyer': forms.Select(attrs={
> 'class': 'form-control', 'id': 'buyer'
> }),
> 'dcolor': forms.TextInput(attrs={
> 'class': 'form-control', 'id': 'dcolor'
> }),
> 'courier_name': forms.TextInput(attrs={
> 'class': 'form-control', 'id': 'courier_name'
> }),
> 'frist_name': forms.TextInput(attrs={
> 'class': 'form-control', 'id': 'frist_name'
> }),
> 'scand_name': forms.TextInput(attrs={
> 'class': 'form-control', 'id': 'scand_name'
> }),
> 'therd_name': forms.TextInput(attrs={
> 'class': 'form-control', 'id': 'therd_name'
> }),
> 'ford_name': forms.TextInput(attrs={
> 'class': 'form-control', 'id': 'ford_name'
> }),
> 'fifth_name': forms.TextInput(attrs={
> 'class': 'form-control', 'id': 'fifth_name'
> }),
> 'dimg': forms.Select(attrs={
> 'class': 'form-control', 'id': 'dimg'
> })
>
> }
vews.py
@login_required(login_url='login')
def create_delivery(request):
forms = DeliveryForm()
if request.method == 'POST':
forms =DeliveryForm(request.POST)
if forms.is_valid():
ddesign = forms.cleaned_data['ddesign']
buyer = forms.cleaned_data['buyer']
dcolor = forms.cleaned_data['dcolor']
courier_name = forms.cleaned_data['courier_name']
frist_name = forms.cleaned_data['frist_name']
scand_name =forms.cleaned_data['scand_name']
therd_name = forms.cleaned_data['therd_name']
ford_name = forms.cleaned_data['ford_name']
fifth_name = forms.cleaned_data['fifth_name']
dimg = forms.cleaned_data['dimg']
Delivery.objects.create(
ddesign=ddesign,
buyer=buyer,
dcolor=dcolor,
courier_name=courier_name,
frist_name=frist_name,
scand_name=scand_name,
therd_name=therd_name,
ford_name=ford_name,
fifth_name=fifth_name,
dimg=dimg,
)
return redirect('delivery-list')
context = {
'form': forms
}
return render(request, 'store/create_delivery.html', context)
def updateDelivery(request, pk):
delivery = Delivery.objects.get(id =pk)
forms = DeliveryForm(instance=delivery)
if request.method == 'POST':
forms = DeliveryForm(request.POST, instance=delivery)
if forms.is_valid():
forms.save()
return redirect('delivery-list')
context = {'form':forms}
return render(request, 'store/create_delivery.html', context)
def deleteDelivery(request, pk):
delivery = Delivery.objects.get(id=pk)
if request.method == "POST":
delivery.delete()
return redirect('delivery-list')
context = {'item':delivery}
return render(request, 'store/delivery_delete.html', context)
class DeliveryListView(ListView):
model = Delivery
template_name = 'store/delivery_list.html'
context_object_name = 'delivery'
lest.html
<tbody>
{% if delivery %}
{% for delivery in delivery %}
<tr>
<td class="serial">{{ forloop.counter }}</td>
<td>{{ delivery.ddesign }}</td>
<td>{{ delivery.buyer }}</td>
<td>{{ delivery.dcolor }}</td>
<td >{{ delivery.courier_name}}</td>
<td>{{ delivery.frist_name }}</td>
<td>{{ delivery.scand_name }}</td>
<td>{{ delivery.ford_name }}</td>
<td>{{ delivery.fifth_name }}</td>
<td><img src="{{delivery.dimg.url}}"></td>
<td style="font-size: 18px;text-align: center;">{{ delivery.created_date }</td>
<td>
<a class="btn btn-sm btn-info" href="{% url 'updete_delivery' delivery.id %}">Modify</a>
</td>
<td><a class="btn btn-sm btn-danger" href="{% url 'delete_delivery' delivery.id %}">del</a>
</td>
</tr>
{% endfor %}
{% else %}
<tr>
<td>no information</td><
/tr>
{% endif %}
</tbody
creat.html
<div class="form-group">
<label for="dimg" class="control-label mb-1">insert photo</label>{{ form.dimg }}</div>
<div><button id="payment-button" type="submit" class="btn btn-lg btn-info btn-block">
<span id="payment-button-amount">add</span></button></div>
urls.py
path('create-delivery/', create_delivery, name='create-delivery'),
path('updete_delivery /<str:pk>/', updateDelivery, name='updete_delivery'),
path('delete_delivery/<str:pk>/', deleteDelivery, name="delete_delivery"),
path('delivery-list/', DeliveryListView.as_view(), name='delivery-list'),
Создайте папку static в корне проекта и внутри папки static создайте папку media, в которой будут храниться загруженные изображения,
попробуйте настроить статические файлы в settings.py
, добавив следующие строки сразу после STATIC_URL = 'static/'
MEDIA_URL = 'media/'
STATICFILES_DIRS = [BASE_DIR / 'static']
STATIC_ROOT = BASE_DIR / 'staticfiles/'
MEDIA_ROOT = BASE_DIR / 'static/media'
Затем добавьте ссылки для медиа в ваш проект urls.py
следующим образом
from django.conf import settings
from django.conf.urls.static import static
.......
urlpatterns = [
....
]
urlpatterns += static(settings.STATIC_URL, document_root=settings.STATIC_ROOT)
urlpatterns += static(settings.MEDIA_URL, document_root=settings.MEDIA_ROOT)
Теперь все готово, запустите python manage.py collectstatic
в терминале. Теперь последнее, что нужно сделать, это загрузить статику в ваш шаблон в верхней части вашего шаблона.
{% load static %}
<tbody>
{% if delivery %}
{% for delivery in delivery %}
<tr>
<td class="serial">{{ forloop.counter }}</td>
<td>{{ delivery.ddesign }}</td>
<td>{{ delivery.buyer }}</td>
<td>{{ delivery.dcolor }}</td>
<td >{{ delivery.courier_name}}</td>
<td>{{ delivery.frist_name }}</td>
<td>{{ delivery.scand_name }}</td>
<td>{{ delivery.ford_name }}</td>
<td>{{ delivery.fifth_name }}</td>
<td><img src="{{delivery.dimg.url}}"></td>
<td style="font-size: 18px;text-align: center;">{{ delivery.created_date }</td>
<td>
<a class="btn btn-sm btn-info" href="{% url 'updete_delivery' delivery.id %}">Modify</a>
</td>
<td><a class="btn btn-sm btn-danger" href="{% url 'delete_delivery' delivery.id %}">del</a>
</td>
</tr>
{% endfor %}
{% else %}
<tr>
<td>no information</td><
/tr>
{% endif %}
</tbody