2012-01-21 49 views
1

django-admin如何從url解析模型?django admin如何從url解析模型?

我需要的URL像這樣 「/管理/視頻/項目/」

我怎麼能這樣做?從該網址獲取模型...

我需要實現獲取'/ admin/vide/item'並返回視頻應用程序中的Item對象的函數。

更新:

我可以很容易地把「管理/視頻/項目」,以video.models.Item但林不知道如果第一個在後面型號名稱是大寫還是可以有更多的大寫laters。

文件說:

view, args, kwargs = urlresolvers.resolve('/admin/video/item/') 
enter code hereview(*args,**kwargs) 

,所以我有看法嗎?下一個問題我如何從該視圖中獲取模型?

回答

3

管理網址由應用標籤和型號名稱組成。

您可以使用django.db.models.get_model從這兩個字符串中獲取模型類。

# urls 
(r'^admin/(?P<app_label>\w+)/(?P<model_name>\w+)/$', my_view), 

# view 
from django.db.models import get_model 

def my_view(request, app_label, model_name): 
    model_class = get_model(app_label, model_name) 
    return http.HttpResponse(model_class.objects.all()) 
0

是否在管理員中註冊了文件應用程序結構。我的意思是,你註冊一個模型,第一個被索引的元素是應用程序名稱,第二個是在models.py中定義的模型名稱。所以這意味着它會搜索video/models.py中定義的項目類別。

通過設置文件,您可以將您的項目的絕對路徑導入到您的視圖中,然後使用拆分請求路徑動態導入所需的模型並...在最後獲取帶有id的項目,分割字符串中的最後一項。

+0

其髒。並且如果模型名稱具有多個大寫字母,則不能幫助我。 – Pol

+0

你是完全正確的 – Davsket

0

大廈虞姬的答案,假設你正在構建此爲「非工作人員」的用戶,這裏是GCBV的方式做同樣的事情:

# urls.py 
url(r'^(?P<app_label>[\w\-]+)/(?P<model_name>[\w\-]+)/$', DynamicListView.as_view(), name='list'), 


# views.py  
class DynamicListView(LoginRequiredMixin, ListView): 
     template_name = 'dynamic_list.html' 

     @property 
     def model(self): 
     return apps.get_model(app_label=str(self.kwargs['app_label']), model_name=str(self.kwargs['model_name'])) 

     @property 
     def app_label(self): 
     return str(self.kwargs['app_label']) 

     def get_queryset(self): 
     queryset = super(DynamicListView, self).get_queryset() 
     return queryset.filter(**self.request.GET.dict()) 

     def dispatch(self, request, *args, **kwargs): 
     if request.user.is_superuser: 
      return super(DynamicListView, self).dispatch(request, *args, **kwargs) 

     else: 
      # Set permissions here for non-staff users 

我發佈一個類似的問題這裏:Dynamically pass app_label and model_name to the url in Python Django