簡體   English   中英

如何從捕獲URL模式“命名組”的Django中排除字符串

[英]How to exclude a string from capturing url pattern “named groups” Django

我正在嘗試使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,並且所有url的產品ID均帶有“。”。 和數字。 所以有什么辦法可以使用上述網址格式為這兩個模型選擇網址frm根。

在Django中不可能有多個視圖和單個urlpattern。

看一下您的看法。 它們幾乎相同。 您應該將邏輯處理不同的url參數放在單個視圖中。

我的建議也是仔細檢查您的模型設計,看起來您有兩個基本相同的模型。 我認為這是您問題的根源。

另外,我假設您正在嘗試創建某種博客。 Django最初是為新聞網站提供框架支持的。 它具有一些有用的工具。 例如,看看SlugField,這可能為您提供所需的功能。 不會使urlpatterns過於復雜。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM