Django 搜索页面的 url 有尾部斜杠和没有

Django search page's url with trailing slash and without

我有模型

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.

情况

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

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

url_contains无济于事

我可以用这样的东西

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

但 url 可以带尾部斜杠。

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

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

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

正如 Daniel 在评论中建议的那样,更好的方法是在添加 url 时对其进行规范化,这样它们要么都带有尾部斜杠,要么 none 其中有。