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