【发布时间】:2016-07-13 15:08:36
【问题描述】:
我希望这只是我对正则表达式理解不佳的一个问题。 我正在尝试使用 Django 1.9's generic views 上的确切代码来构建博客和个人网站,并且在测试过程中,我遇到了麻烦:
def test_post_page(self):
post = PostModelFactory()
first_post = Post.objects.all()[0]
post_url = first_post.get_absolute_url()
print(post_url)
response = self.client.get(post_url, follow=True)
self.assertEqual(response.status_code, 200)
因此,通过该打印声明,我确定 models.Post.get_absolute_url() 正在返回我的主页 URL。这是models.py:
class Post(models.Model):
title = models.CharField(max_length=200)
subtitle = models.CharField(max_length=200, default="")
pub_date = models.DateTimeField(auto_now_add=True)
text = models.TextField()
slug = models.SlugField(max_length=40,unique=True)
def get_absolute_url(self):
return "%s/" % (self.slug)
如果出现,我把通用视图文档的内容抄下来了,所以我在/blog/urls.py的Detailview如下:
url(r'^(?P<slug>[-\w]+)/$', PostDetailView.as_view(), name='post-detail'),
与views.py相同:
class PostDetailView(DetailView):
model = Post
def get_context_data(self, **kwargs):
context = super(PostDetailView, self).get_context_data(**kwargs)
context['now'] = timezone.now()
return context
据我所知,我的 get_absolute_url() 函数根本没有做我认为它正在做的事情,更不用说 urls.py 中的正则表达式期望它做的事情了。
另外:有没有人可以完全解释 slugfield 的工作原理?我知道它是一个创建 url 的关键字生成器,但我不确定它是如何工作的(或者不是,如本例所示)。
然后,最后,在我准遵循文档的教程和文档本身中,我并不完全理解模板中的变量名来自哪里(我的理解是请求命中是 URL ,它从views.py中生成数据)。模板中的“ListView”对象共享模型名称,“post”(或文档中的“article”),其底部的pageview只需通过“page_obj”访问,“DetailView”对象简称为“目的”。我也可能在对我的 ListView 进行分页时遇到问题,(这与文档示例相同,但在 get_context_data 正上方有额外的行 paginate_by = 2。
谢谢。
编辑:
我已经包含了 PostModelFactory:
class PostModelFactory(DjangoModelFactory):
class Meta:
model = Post()
django_get_or_create = (
'title',
'subtitle',
'text',
'pub_date',
)
title = 'This is a test.'
subtitle = 'This is only a test.'
text = 'Madness? This is Sparta.'
pub_date = timezone.now()
def __init__(self):
self.save()
编辑:问题原来是 PostModelFactory 中缺少 slug。
【问题讨论】:
标签: python regex django detailview