Python 如何从捕获url模式中排除字符串;命名组“;德扬戈

Python 如何从捕获url模式中排除字符串;命名组“;德扬戈,python,django,python-3.x,django-views,Python,Django,Python 3.x,Django Views,我正在尝试使URL模式从根目录捕获所有URL 我的主要URL.py是: path('', (include('myapp.urls', namespace='app1') 我在app1.url中使用了两种url模式: re_path(r'^(?P<url_var1>[-\w./]+)/$', DetailView1.as_view(), name='DetailView1'), re_path(r'^(?P<url_var2>[-\w./]+)/$', DetailVi

我正在尝试使URL模式从根目录捕获所有URL

我的主要URL.py是:

path('', (include('myapp.urls', namespace='app1')
我在app1.url中使用了两种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'),
当我请求url“/first post/my first post/”时,它将签出我的“model1”中标题“my_url”下的url并返回页面

但当我请求url“/second post/my second post/”时,它会检查“model1”中的url并抛出一个错误,因为url位于“my_url”标题下的“model2”中

我知道urlpattern遵循一个squence检查,并在匹配第一个urlpattern的模式(DetailView1)处停止,这就是为什么它会给我这个错误

我想知道是否有一种方法可以覆盖urlpattern的这种行为

当在DetailView1中找不到url时,我也尝试了反向:

try:
    obj1 = model1.objects.get(my_url=url_var1)
except:
    return reverse('app1:DetailView2')
但它仍然给我一个错误

如果你们中有人对从根抓取mare的urlpattern有任何其他建议,而不是两种类型的urlpattern,请告诉我


我正在制作一个产品兼博客网站,它有两个模型“model1”是一个产品模型,“model2”是一个博客模型。现在,“model1”用于汽车,主要分为“汽车”和“自行车”两大类,“model2”与“最新车型”和“最新自行车”相同。对于这些类别,我想从根目录中获取URL,这些URL被指定为“/cars/lexus…”、“/bike/ducati…”。此外,还可以进一步添加子文件夹url,并且所有url的产品ID都有“.”和数字。因此,我可以使用上述url模式为两种模型选择url frm根。

在Django中不可能有多个视图和单个url模式

看看你的观点。它们几乎是一样的。您应该将处理不同url参数的逻辑放在单个视图中

我的建议是仔细检查你的模型设计,看起来你有两个基本相同的模型。我觉得这是你问题的根源

此外,我假设您正在尝试创建某种博客。
Django最初是作为新闻网站的框架。它有一些有用的工具。例如,看看这可能会为您提供您正在寻找的功能。不会使urlpatterns过于复杂。

您是否需要使用两个数据库表来查看详细信息。?为什么呢?我很想知道。如果这是最终结果,那么你有两个选择。一个是改变URL模式,然后第二个是检查这两个模型(这将需要时间)。我已经编辑了这个帖子来解释我的实际问题,请仔细考虑一下,为您的所有细节创建一个单一的模型。我正在制作一个产品和博客网站,它有两个模型“MODEL1”,这是一个产品模型和“Mult2”。这是一种博客模式。现在,“model1”用于汽车,主要分为“汽车”和“自行车”两大类,“model2”与“最新车型”和“最新自行车”相同。对于这些类别,我想从根目录中获取URL,这些URL被指定为“/cars/lexus…”、“/bike/ducati…”。此外,还可以进一步添加子文件夹url,并且所有url的产品ID都有“.”和数字。因此,我有办法使用上述url模式为两种模型选择url frm根。不,先生,这不是一个新问题,这只是实际的观点。
try:
    obj1 = model1.objects.get(my_url=url_var1)
except:
    return reverse('app1:DetailView2')