我正在尝试使url模式来从根目录捕获所有url。
我的主要urls.py是:
path('', (include('myapp.urls', namespace='app1')
我在app1.urls中使用了两个网址格式:
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})
当我请求网址“ / first-post / my-first-post /”时,它将检出标题为“ my_url”下的“ model1”中的网址,并返回页面。
但是,当我请求网址“ / second-post / my-second-post /”时,它会检出“ model1”中的网址并抛出错误,因为该网址位于标头“ 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”用于具有两个主要类别“ car”和“ bike”的汽车,而“ model2”具有与“最新的汽车”和“最新的自行车”相同的名称。对于这些类别,我想从根目录中获取分别为“ / cars / lexus .....”,“ / bike / ducati ....”的网址。同样,可以进一步添加子文件夹url,并且所有url的产品ID均带有“。”。和数字。所以有什么办法可以使用上述网址格式为这两个模型选择网址frm根。
最佳答案
在Django中不可能有多个视图和单个urlpattern。
看看你的看法。他们几乎一样。您应该将逻辑处理不同的url参数放在单个视图中。
我的建议是仔细检查您的模型设计,看起来您有两个基本相同的模型。我认为这是您问题的根源。
另外,我假设您正在尝试创建某种博客。
Django最初是为新闻网站提供框架支持的。它具有一些有用的工具。例如,查看SlugField。这可能为您提供所需的功能。不会使urlpatterns过于复杂。