Я новичок, работающий на новостном сайте (или, по крайней мере, пытающийся решить множество "проблем" за последние несколько дней, смеется), пытающийся выучить Джанго как можно лучше.
Это то, что яхочу сделать:
У меня есть модель статьи, раньше у нее было 6 полей изображения, которые я использовал для отправки в шаблон и визуализации изображений, каждое поле изображения имело свое имя, и все было хорошо в мире,Затем мне поставили задачу поместить изображения статьи в отдельную модель изображения.Итак, я сделал это:
class Article(models.Model):
title = models.CharField('title', max_length=200, blank=True)
slug = AutoSlugField(populate_from='title', default="",
always_update=True, unique=True)
author = models.CharField('Author', max_length=200, default="")
description = models.TextField('Description', default="")
is_published = models.BooleanField(default=False)
article_text = models.TextField('Article text', default="")
pub_date = models.DateTimeField(default=datetime.now, blank=True)
article_category = models.ForeignKey(Category, on_delete="models.CASCADE", default="")
def __str__(self):
return self.title
class ArticleImages(models.Model):
article = models.ForeignKey(Article, on_delete="models.CASCADE", related_name="image")
image = models.ImageField("image")
name = models.CharField(max_length=50, blank=True)
Но до сих пор я не мог получить доступ к своим изображениям в моем шаблоне, используя
{{ article.image.url }} or {{ article.image.image.url }}
или любую другую комбинацию.Почему это ?Правильно ли я настроил свои модели?Один человек предложил мне изменить поле модели с ForeignKey на OneToOneField, но я не получил много отзывов о том, почему и как?
Итак, как бы я создал цикл for, который проходит по модели Articles изатем получает соответствующие изображения для каждой статьи?По сути, я хочу, чтобы он вел себя так, как будто у меня все еще есть 6 различных полей, как и раньше.(Я должен сделать это таким образом, это часть задачи).
Вот мои взгляды и шаблон «индекса», который я использовал для циклического просмотра статей и отображения 6 последних новостей на моей домашней странице.,(пожалуйста, не обращайте внимания на теги, я знаю, что они не работают так, как этот шаблон ... просто шаблон, чтобы вы могли понять, о чем я говорю)
мои views.py:
class IndexView(generic.ListView):
template_name = 'news/index.html'
context_object_name = 'latest_article_list'
def get_queryset(self):
return Article.objects.all()
class CategoryView(generic.ListView):
template_name = 'news/categories.html'
context_object_name = 'category'
def get_queryset(self):
return Article.objects.filter(article_category__category_title="Politics")
class ArticlesView(generic.ListView):
context_object_name = 'latest_article_list'
template_name = 'news/articles.html'
paginate_by = 5
def get_context_data(self, **kwargs):
context = super(ArticlesView, self).get_context_data(**kwargs)
context['categories'] = Category.objects.all()
return context
def get_queryset(self):
category_pk = self.request.GET.get('pk', None)
if category_pk:
return Article.objects.filter(article_category__pk=category_pk).order_by("-pub_date")
return Article.objects.order_by("-pub_date")
def article(request, article_id):
article = get_object_or_404(Article, pk=article_id)
context = {'article': article,
'article_category': article.article_category.category_title}
return render(request, 'news/article.html', context)
шаблон, который я использовал со своей старой моделью:
{% for article in latest_article_list %}
<img class="single-article-img" src="{{ article.image.name.url }}" alt="">
<div class="container row">
<!-- Start Left Blog -->
<div class="article mt-10 col-md-4 col-sm-4 col-xs-12">
<div class="single-blog" style="margin:10px auto;">
<div class="single-blog-img">
<a href="{% url 'news:article' article.id %}#article-title">
<img class="for-imgs" src="{{ article.image.url }}" alt="">
</a>
</div>
<div class="blog-meta">
<span class="date-type">
<i class="fa fa-calendar"></i>{{ article.pub_date }}
</span>
</div>
<div class="xx blog-text">
<h4>
<a href="{% url 'news:article' article.id %}#article-title">{{ article.title }}</a>
</h4>
<p>
{{ article.description|truncatewords:30 }}
</p>
</div>
<span>
<a href="{% url 'news:article' article.id %}" class="ready-btn">Read more</a>
</span>
</div>
</div>
{% endfor %}
Спасибо!