Как мне импортировать отдельный объект из django в html-шаблон

#python #html #django #web #django-queryset

#python #HTML #django #веб #django-набор запросов

Вопрос:

я создаю веб-сайт с django, и у меня есть 2 модели в нем, 1: Gifi (содержит изображения .gif) и 2: categorite! Когда я нажимаю на одно из изображений .gif, я хочу, чтобы оно было отправлено в другой шаблон html, где отображается это изображение и информация о нем.Я выполнил некоторое кодирование, и когда я нажимаю на изображение, я попадаю на HTML-страницу, но проблема в том, что никакие данные из django не импортируются на эту HTML-страницу, кроме идентификатора в URL.Я знаю, что проблема настолько проста, но я новичок в этом, и я не знаю кода.

Это модели:

 from django.db import models

class categorite(models.Model):
    name = models.CharField(max_length=100)
    id = models.AutoField(primary_key=True)

class Gifi(models.Model):
    foto = models.ImageField(upload_to='website/static/')
    emri = models.CharField(max_length=100)
    Source = models.CharField(max_length=100)
    Kodet = models.CharField(max_length=12)
    categoryId = models.ForeignKey(categorite, on_delete=models.CASCADE)
    id = models.AutoField(primary_key=True)
  

Это views.py:

 from django.shortcuts import render,get_object_or_404
from .models import  Gifi,categorite
# Create your views here.
def home(request):
    return render(request, 'website/home.html')

def categories(request):
    content = {
        'view': categorite.objects.all()
    }
    return render(request, 'website/categories.html',content)

def PostaCode(request):
    return render(request, 'website/PostaCode.html')

def Contact(request):
    return render(request, 'website/Contact.html')
def category(request,id):
    content = {
        'view':  Gifi.objects.filter(categoryId_id=id),
    }
    return render(request, 'website/category.html',content)

def code(request,id):
    content = {
        'view':  get_object_or_404(Gifi,pk=id)
    }
    return render(request, 'website/code.html',content)
  

Это шаблон, в котором я нажимаю на изображение:

 {% for gifi in view %}

         <a href="{% url 'code' gifi.id %}" class="gif">

    <img src="/static/{{gifi.foto}}" id="foto" alt="" >
      <p id="source">Source: {{gifi.Source}}</p>
      <p id="permbatjaa">Coding: {{gifi.Kodet}}</p>
    </a>


{% endfor %}
  

Это шаблон, к которому мне нужно перейти, и где должна быть информация об изображении (code.html ):

  <img src="/static/{{gifi.foto}}" id="foto" alt="" >
        <p>{{gifi.emri}}</p>
  

Ответ №1:

Прошло несколько дней, поэтому вы уже можете получить ответ, но функция просмотра Django и шаблон настолько просты, и вы могли бы написать: models.py :

 from django.db import models

class Categorite(models.Model):
    # id field is already exists models.Model not necessary
    #id = models.AutoField(primary_key=True) 
    name = models.CharField(max_length=100)


class Gifi(models.Model):
    foto = models.ImageField(upload_to='website/static/')
    emri = models.CharField(max_length=100)
    source = models.CharField(max_length=100) 
    kodet = models.CharField(max_length=12)
    category = models.ForeignKey(Categorite, on_delete=models.CASCADE, related_name='gifis')
  

И views.py :

 def category(request, id):
    # For the foreign key fields _id field auto created also
    objs = Gifi.objects.filter(category_id=id)  
    return render(request, 'website/category.html', {'gifis': objs})


def code(request, id):
    obj = get_object_or_404(Gifi, pk=id)
    return render(request, 'website/code.html', {'gifi': obj})
  

И шаблон website/category.html

   {% for gifi in gifis %}
    <a href="{% url 'code' gifi.id %}" class="gif">
      <img src="/static/{{gifi.foto}}" id="foto" alt="" >
      <p id="source">Source: {{gifi.source}}</p>
      <p id="permbatjaa">Coding: {{gifi.kodet}}</p>
    </a>
  {% endfor %}
  

И шаблон website/code.html

 <img src="/static/{{gifi.foto}}" id="foto" alt="" >
<p>{{gifi.emri}}</p>
  

Чтобы соответствовать спецификации PEP 8, для имен переменных рекомендуется использовать under_score, а для имен классов — camelCase.
Если вы новичок в Django, я настоятельно рекомендую, чтобы вам очень помогла страница с официальным руководством.