slider.html当前没有在上次更新后提取内容.Slider.html是随机的; 但是,我有四个相同的故事,网址不再适用于他们相应的详细视图页面了.{% for random_article in random_articles %}
<div class="slider">
<div class="group visible">
<div class="sliderItem">
<a href="{%url "detailed" slug=random_article.slug %}"><img src="{{random_article.relatedImage}}" alt="" class="sliderPicture"></a>
<a href="{%url "detailed" slug=random_article.slug %}"><p class="related">{{random_article.title}}</p></a>
</div><!-- /.sliderItem -->
</div><!-- /.group -->
</div><!-- /.slider -->
{% endfor %}
Run Code Online (Sandbox Code Playgroud)
NoReverseMatch at /last-us
Reverse for 'detailed' with arguments '()' and keyword arguments '{u'slug': ''}' not found. 1 pattern(s) tried: ['(?P<slug>\\S+)']
Run Code Online (Sandbox Code Playgroud)
from django.conf.urls import patterns, url
from . import views
urlpatterns = patterns(
'',
url(r'^$', views.BlogIndex.as_view(), name="list"),
url(r'^(?P<slug>\S+)', views.BlogDetail.as_view(), name="detailed"),
)
Run Code Online (Sandbox Code Playgroud)
添加context['random_slider'] = FullArticle.objects.order_by('?')[:4]但我不认为这是正确的方法.因此,我可以获得四篇不同的文章,而相同的文章中有四篇是随机的.
from django.views import generic
from . import models
from .models import FullArticle
# Create your views here.
class BlogIndex(generic.ListView):
queryset = models.FullArticle.objects.published()
template_name = "list.html"
def get_context_data(self, **kwargs):
context = super(BlogIndex, self).get_context_data(**kwargs)
context['random_article'] = FullArticle.objects.order_by('?').first()
return context
class BlogDetail(generic.DetailView):
model = models.FullArticle
template_name = "detailed.html"
def get_context_data(self, **kwargs):
context = super(BlogDetail, self).get_context_data(**kwargs)
context['object_list'] = models.FullArticle.objects.published()
return context
def get_context_data(self, **kwargs):
context = super(BlogDetail, self).get_context_data(**kwargs)
context['random_articles'] = FullArticle.objects.exclude(
pk=self.get_object().pk
).order_by('?')[:4]
return context
Run Code Online (Sandbox Code Playgroud)
我正在使用FullArticle.objects.order_by('?').first()从我的数据库中获取一篇随机文章,但是当我刷新页面时它正在给出相同的文章.我的模型,视图或我如何调用它(使用切片)list.html或slider.html导致问题的方式可能缺少某些东西.
<div class="mainContent clearfix">
<div class="wrapper">
<h1>Top 10 Video Games</h1>
{% for article in object_list|slice:":1" %}
<p class="date">{{article.pubDate|date:"l, F j, Y" }}</p> | <p class="author">{{article.author}}</p>
<a href="{%url "detailed" slug=article.slug %}"><img src="{{article.heroImage}}" alt="" class="mediumImage"></a>
<p class="caption">{{article.body|truncatewords:"80"}}</p>
{% endfor %}
Run Code Online (Sandbox Code Playgroud)
from django.db import models
from django.core.urlresolvers import reverse
# Create your models here.
class FullArticleQuerySet(models.QuerySet):
def published(self):
return self.filter(publish=True)
class FullArticle(models.Model):
title = models.CharField(max_length=150)
author = models.CharField(max_length=150)
slug = models.SlugField(max_length=200, unique=True)
pubDate = models.DateTimeField(auto_now_add=True)
updated = models.DateTimeField(auto_now=True)
category = models.CharField(max_length=150)
heroImage = models.CharField(max_length=250, blank=True)
relatedImage = models.CharField(max_length=250, blank=True)
body = models.TextField()
publish = models.BooleanField(default=True)
gameRank = models.CharField(max_length=150, blank=True, null=True)
objects = FullArticleQuerySet.as_manager()
def __str__(self):
return self.title
def get_absolute_url(self):
return reverse("FullArticle_detailed", kwargs={"slug": self.slug})
class Meta:
verbose_name = "Blog entry"
verbose_name_plural = "Blog Entries"
ordering = ["-pubDate"]
Run Code Online (Sandbox Code Playgroud)
问题是您在"编译时"设置了类属性的值,而不是每次调用视图时都是如此.相反,你可以这样做:
class BlogIndex(generic.ListView):
queryset = models.FullArticle.objects.published()
template_name = "list.html"
def random_article(self):
return = FullArticle.objects.order_by('?').first()
Run Code Online (Sandbox Code Playgroud)
要么:
class BlogIndex(generic.ListView):
queryset = models.FullArticle.objects.published()
template_name = "list.html"
def get_context_data(self, **kwargs):
context = super(BlogIndex, self).get_context_data(**kwargs)
context['random_article'] = FullArticle.objects.order_by('?').first()
return context
Run Code Online (Sandbox Code Playgroud)
[更新]
在列表html中,我只需要一篇随机文章.在slider.html中,我需要四篇随机文章,我会在defArt_context_data片段中的某个地方使用FullArticle.objects.order_by('?')[:4]吗?
是.在视图中将其复数(不要忘记从侧面列表中排除主要文章):
class BlogDetail(generic.DetailView):
model = models.FullArticle
template_name = "detailed.html"
def get_context_data(self, **kwargs):
context = super(BlogDetail, self).get_context_data(**kwargs)
context['random_articles'] = FullArticle.objects.exclude(
pk=self.get_object().pk
).order_by('?')[:4]
return context
Run Code Online (Sandbox Code Playgroud)
在模板中,执行:
{% for random_article in random_articles %}
<div class="sliderItem">
<a href="{%url "detailed" slug=random_article.slug %}"><img src="{{random_article.relatedImage}}" alt="" class="sliderPicture"></a>
<a href="{%url "detailed" slug=random_article.slug %}"><p class="related">{{random_article.title}}</p></a>
</div><!-- /.sliderItem -->
{% endfor %}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
248 次 |
| 最近记录: |