python - 在 Django 中以小写形式显示 URL
问题描述
我的模型有一个零售商类别——例如——“沃尔玛”
我数据库中的所有零售商都以首字母大写输入。
我正在尝试在我的网站上显示零售商的产品列表。
我的网址如下所示:
path('retailer-deals/<str:retailer>', deals_by_retailer, name='retailer'),
我的观点是这样的:
def deals_by_retailer(request,retailer):
retailer_deals = Deal.objects.filter(retailer__company=retailer).order_by('expired','-date_added')
retailer = retailer
return render(request, 'deals/deal_by_retailer.html', {'retailer_deals': retailer_deals, 'retailer': retailer})
所以如果我去retailer-deals/walmart
什么都没有出现......
但当然retailer-deals/Walmart
工作正常
我可能很挑剔——但我认为小写看起来更专业,以防walmart
万一有人输入大写版本,我想确保它正确填充
我确实看到有人提到 (?i) 类似的问题,
我试着改变我的路径:
path('(?i)retailer-deals/<str:retailer>', deals_by_retailer, name='retailer'),
但这似乎不起作用..而且,如果我去列出具有关联链接的零售商 - 生成的 url 仍然会有大写的 url..
解决方案
您可以在过滤器中使用iexact,即不区分大小写的完全匹配。
retailer_deals = Deal.objects.filter(
field_name__iexact=retailer).order_by('expired','-date_added')
正如许多其他人所建议的那样,最好的方法是使用 slug 进行此类查询,因此您将拥有:
from django.template.defaultfilters import slugify
import uuid
class YourModel(mdoels):
slug = models.SlugField()
name = models.CharField(max_mength=100)
# override the save method to have slug automatically generated
def save(self, *args, **kwargs):
if self.pk is None:
slug = slugify(self.name)
while self.__class__.objects.filter(slug=slug).exists():
slug = "%s-%s" % (slug,str(uuid.uuid4())[:5])
self.slug = slug
super(YourModel, self).save(*args, **kwargs)
您的网址将变为:
path('retailer-deals/<slug:slug>', deals_by_retailer, name='retailer'),
和你的看法:
def deals_by_retailer(request,slug):
retailer_deals = Deal.objects.filter(retailer__slug=slug)
''' codes '''
推荐阅读
- list - 如何从列表中获取除与某些字符串相关的数字之外的所有数值
- delphi - FileExists 返回 true 但文件不存在
- wordpress - 如何通过填充货币符号和数字的 meta_key acf 字段排序?
- python - 尝试使用 input.exec 插件时权限被拒绝
- reactjs - 我的计时器无法启动,我不确定为什么?
- python - 通过 int 从 DatetimeIndex 转换为 datetime64[s] 而不除以 1e9 可能吗?
- java - 为什么我的 TextView 为空,尽管我从数据库中获取了值?
- powerbi - 寻找 DAX 语句以在日期范围之间分配值
- r - R 返回第一个下划线后的所有字符
- javascript - 使用Vue.js提交表单后如何多次重定向