繁体   English   中英

Django中的正则表达式错误? DetailView,ListView和博客构建

[英]Bad Regex in Django? DetailView, ListView, and blog construction

我希望这只是我对正则表达式了解不足的问题。 我试图在Django 1.9的通用视图上使用确切的代码来构建博客和个人网站,直到测试,这是我遇到麻烦的地方:

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中的/blog/urls.py如下:

    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”(或文档中的“文章”),其底部的综合浏览量仅通过“ 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中没有a。

理想情况下,您应该在get_absolute_url使用reverse ,而不是对其进行硬编码。

from django.core.urlresolvers import reverse

class Post(models.Model):
    ...
    def get_absolute_url(self):
        return reverse('post-detail', args=[self.slug])

如果您对网址进行硬编码,则该网址应包含一个斜杠。

    def get_absolute_url(self):
        return "/%s/" % (self.slug)

如果first_post.get_absolute_url返回带有当前get_absolute_url的主页URL,则表明first_post.get_absolute_url是空字符串。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM