Django: Использование al oop для вывода изображений и текста из БД - PullRequest
0 голосов
/ 30 марта 2020

Я изучаю программирование и следую учебному пособию, используя django 3, то же самое, что я использую. Текст и изображения не отображаются на веб-интерфейсе в одном конкретном файле html.

1.-In settings.py У меня есть:

MEDIA_ROOT= os.path.join(BASE_DIR,"media")
MEDIA_URL= "/media/"

2.-В моделях. py:

class Property(models.Model):
  title = models.CharField(max_length=200)
  main_photo = models.ImageField(upload_to='photos/%Y/%m/%d/')

3.-In admin.py:

from django.contrib import admin

from .models import Property

class PropertyAdmin(admin.ModelAdmin):
    list_display = ('id', 'title', 'is_published')
    list_display_links = ('id', 'title')
    search_fields = ('title', 'town')
    list_editable = ('is_published',)
    list_per_page = 30

admin.site.register(Property, PropertyAdmin)

Затем я мигрировал в БД, я создал свойства. html и l oop {{ property.main_photo.url }} или {{ property.title }} работает и получает изображения и тексты в этом файле свойств:

{% extends 'base.html' %}

{% load humanize %}

{% block content %}
<section id="showcase-inner" class="py-5 text-white">
    <div class="container">
      <div class="row text-center">
        <div class="col-md-12">
          <h1 class="display-4">Browse Our Properties</h1>
          <p class="lead">Lorem ipsum dolor sit, amet consectetur adipisicing elit. Sunt, pariatur!</p>
        </div>
      </div>
    </div>
  </section>

  <!-- Listings -->
  <section id="listings" class="py-4">
    <div class="container">
      <div class="row">
           {% if properties %}
             {% for property in properties %}
             <div class="col-md-6 col-lg-4 mb-4">
              <div class="card listing-preview">
                <img class="card-img-top" src="{{ property.main_photo.url }}" alt="">
                <div class="card-img-overlay">
                  <h2>
                    <span class="badge badge-secondary text-white">From {{ property.price_per_week | intcomma }}€ per week</span>
                  </h2>
                </div>
                <div class="card-body">
                  <div class="listing-heading text-center">
                    <h4 class="text-primary">{{ property.title }}</h4>
                    <p>
                      <i class="fas fa-map-marker text-secondary"></i> {{ property.town }}</p>
                  </div>
                  <hr>
                  <div class="row py-2 text-secondary">
                    <div class="col-6">
                      <i class="fas fa-check"></i> {{ property.swimming_pool }}</div>
                    <div class="col-6">
                      <i class="fas fa-wifi"></i> {{ property.free_wifi }}</div>
                  </div>
                  <div class="row py-2 text-secondary">
                    <div class="col-6">
                      <i class="fas fa-bed"></i> Bedrooms: {{ property.bedrooms }}</div>
                    <div class="col-6">
                      <i class="fas fa-bath"></i> Bathrooms: {{ property.bathrooms }}</div>
                  </div>
                  <a href="{% url 'property' property.id %}" class="btn btn-primary btn-block">More Info</a>
                </div>
              </div>
            </div>
             {% endfor %}
           {% else %}
             <div class="col-md-12">
               <p>No Properties available</p>
             </div>
           {% endif %}

      </div>

      <div class="row">
        <div class="col-md-12">
          {% if properties.has_other_pages %}
            <ul class="pagination">
              {% if properties.has_previous %}
                 <li class="page-item">
                   <a href="?page={{properties.previous_page_number}}" class="page-link">&laquo;
                   </a>
                 </li>
              {% else %}
                <li class="page-item-disabled">
                  <a class="page-link">&laquo;</a>
                </li>
              {% endif %}
              {% for i in properties.paginator.page_range %}
                {% if properties.number == i %}
                  <li class="page-item active">
                    <a class="page-link">{{i}}</a>
                  </li>
                {% else %}
                  <li class="page-item">
                    <a href="?page{{i}}" class="page-link">{{i}}</a>
                  </li>  
                {% endif %}  
              {% endfor %}    
            </ul>
          {% endif %}
        </div>
      </div>
    </div>
  </section>
{% endblock %}

Следующим шагом является создание файла свойств. html, а также использование l oop, но все в которых используются фигурные скобки l oop doble, не отображаются:

{% extends 'base.html' %}

{% load humanize %}

{% block content %} 


<section id="showcase-inner" class="py-5 text-white">
    <div class="container">
      <div class="row text-center">
        <div class="col-md-12">
          <h1 class="display-4">{{ property.title }}</h1>
          <p class="lead">
            <i class="fas fa-map-marker"></i> {{ property.town }}</p>
        </div>
      </div>
    </div>
  </section>
{% endblock %}

Я проверял несколько раз, и мой код точно такой же, как в учебнике, но мой интерфейс не отображается.

Просмотры .py:

from django.shortcuts import get_object_or_404, render
from django.core.paginator import EmptyPage, PageNotAnInteger, Paginator

from .models import Property

def index(request):
    properties = Property.objects.get_queryset().order_by('id').filter(is_published=True)

    paginator = Paginator(properties, 30)
    page = request.GET.get('page')
    paged_properties = paginator.get_page(page)

    context = {
        'properties': paged_properties
    }


    return render(request, 'properties/properties.html', context)

def property(request, property_id):
    property = get_object_or_404(Property, pk=property_id)

    context = {
        'property': property
    }


    return render(request, 'properties/property.html')    

def search(request):
    return render(request, 'properties/search.html')   

1 Ответ

0 голосов
/ 30 марта 2020

Вы не передаете контекст properties/property.html внутри def property(..., ...)

Изменить:

return render(request, 'properties/property.html')

Кому:

return render(request, 'properties/property.html', context)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...