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/page1
、newsru.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 其中有。
我有模型页
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/page1
、newsru.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 其中有。