python - 如何从捕获 url 模式“命名组”Django 中排除字符串
问题描述
我正在尝试制作 urls 模式以从 root 捕获所有 url。
我的主要 urls.py 是:
path('', (include('myapp.urls', namespace='app1')
我在 app1.urls 中使用了两个 url 模式:
re_path(r'^(?P<url_var1>[-\w./]+)/$', DetailView1.as_view(), name='DetailView1'),
re_path(r'^(?P<url_var2>[-\w./]+)/$', DetailView2.as_view(), name='DetailView2'),
我的 views.py 文件如下:
class DetailView1(View):
template_name = 'detail.html'
def get(self, request, url_var1):
obj1 = model1.objects.get(my_url=url_var1)
return render(request, self.template_name, {'obj1':obj1})
class DetailView2(View):
template_name = 'detail.html'
def get(self, request, url_var2):
obj2 = model2.objects.get(my_url=url_var2)
return render(request, self.template_name, {'obj2':obj2})
当我请求 url“/first-post/my-first-post/”时,它会在标题“my_url”下检查我的“model1”中的 url 并返回页面。
但是当我请求 url "/second-post/my-second-post/" 时,它会检查 "model1" 中的 url 并引发错误,因为 url 在标题 "my_url" 下的 "model2" 中。
我知道 urlpattern 遵循序列检查,并在与第一个 urlpattern(DetailView1)匹配的模式处停止,这就是它给我这个错误的原因。
我想知道有没有办法可以覆盖 urlpattern 的这种行为。
当在 DetailView1 中找不到 url 时,我也尝试过反向:
try:
obj1 = model1.objects.get(my_url=url_var1)
except:
return reverse('app1:DetailView2')
但它仍然给我一个错误。
如果你们中的任何人有任何其他关于从根中捕获 urlpattern 的建议,而不是两种类型的 urlpattern,请告诉我。
我正在制作一个产品兼博客网站,它有两个模型“model1”是产品模型,“model2”是博客模型。现在,“model1”适用于具有 2 个主要类别“car”和“bike”的汽车,“model2”与“latest in cars”和“latest in bikes”具有相同的含义。对于这些类别,我想从根目录中获取 URL,这些 URL 被指定为“/cars/lexus.....”、“/bike/ducati ....”。此外,还可以进一步添加子文件夹 url,并且所有 url 的产品 ID 都带有“.”。和数字。那么有没有办法我可以使用上面的 url 模式为两个模型选择 url frm root。
解决方案
在 Django 中不可能有多个视图和单个 urlpattern。
看看你的看法。它们几乎相同。您应该将处理不同 url 参数的逻辑放在单个视图中。
我的建议也是仔细检查您的模型设计,看起来您有两个基本相同的模型。我觉得这是你问题的根源。
此外,我假设您正在尝试创建某种博客。Django 最初是作为为新闻网站提供支持的框架。它有一些有用的工具。例如看看SlugField这可能会为您提供您正在寻找的功能。不会过度复杂化 urlpatterns。
推荐阅读
- javascript - JavaScript 中的比较运算符
- c++ - 我收到一段代码的警告,但是 bjarne stroustrup 的 c++ 书说它应该是一个错误。这里有什么?
- mysql - 我正在使用 mysqlcommand 在 db 中输入数据,但某些变量已识别,其他变量未识别,请检查代码
- powershell - Test-Path 是否接受相对路径?
- c++ - C++ 模板类仅由 uint8_t 类型崩溃
- javascript - 如何获取由 querySelectorAll() 方法 (javascript) 生成的 DOM 数组的每个元素的索引?
- msys2 - 在 MSYS2 MINGW32 shell 中运行软件构建
- amazon-web-services - 如何在 AWS Lambda C# 中获取环境变量
- sql - 在雪花中选择常量和*?
- python - 发布者/消费者用于在 eth0 int 中捕获 AMQP 包,但是当我运行此代码时,我只能在环回接口中捕获数据包