Django搜索页面的网址有斜杠和没有

时间:2015-12-09 13:07:20

标签: django django-1.8

我有一个模型页面

class Page(models.Model):
    category = models.ForeignKey(Category)
    title = models.CharField(max_length=128)
    url = models.URLField()
    views = models.IntegerField(default=0)

当我在表单中添加新页面时,我希望确保不会添加已添加的页面。

所以我这样做

*******
if Page.objects.filter(url=link)
*******

但是有一个问题。有时,Page实例有一个带斜杠的URL,有时却没有。同样的情况是给定的链接。

情况

link = http://newsru.com
url = http://newsru.com/

我可以在这里使用url__startswith,但它会检测newsru.com/page1newsru.com/page2等所有网页。

url_contains无法帮助

我可以使用这样的东西

if Page.objects.filter(url=link.strip('/')

但是网址可以是斜杠。

这种情况的正确查找是什么?

1 个答案:

答案 0 :(得分:1)

在Django中,您可以使用Q()个对象进行OR搜索。

from django.db.models import Q
link = link.strip('/')
Page.objects.filter(Q(url=link)|Q(url=link+'/')

正如丹尼尔在评论中所建议的那样,更好的方法是在添加网址时对网址进行规范化,这样他们要么都有斜杠,要么都没有。