mirror of
https://github.com/Hopiu/wagtail.git
synced 2026-04-14 20:10:59 +00:00
Get detail_url values from router
No longer need ObjectDetailURL!
This commit is contained in:
parent
ed42eb001d
commit
789cbabebf
3 changed files with 28 additions and 4 deletions
|
|
@ -4,6 +4,7 @@ from collections import OrderedDict
|
|||
|
||||
from django.conf.urls import url
|
||||
from django.http import Http404
|
||||
from django.core.urlresolvers import reverse
|
||||
|
||||
from rest_framework import status
|
||||
from rest_framework.response import Response
|
||||
|
|
@ -140,6 +141,7 @@ class BaseAPIEndpoint(GenericViewSet):
|
|||
context = {
|
||||
'request': self.request,
|
||||
'view': self,
|
||||
'router': self.request.wagtailapi_router
|
||||
}
|
||||
|
||||
if self.action == 'detail_view':
|
||||
|
|
@ -166,6 +168,15 @@ class BaseAPIEndpoint(GenericViewSet):
|
|||
url(r'^(?P<pk>\d+)/$', cls.as_view({'get': 'detail_view'}), name='detail'),
|
||||
]
|
||||
|
||||
@classmethod
|
||||
def get_object_detail_urlpath(cls, model, pk, namespace=''):
|
||||
if namespace:
|
||||
url_name = namespace + ':detail'
|
||||
else:
|
||||
url_name = 'detail'
|
||||
|
||||
return reverse(url_name, args=(pk, ))
|
||||
|
||||
|
||||
class PagesAPIEndpoint(BaseAPIEndpoint):
|
||||
base_serializer_class = PageSerializer
|
||||
|
|
|
|||
|
|
@ -13,6 +13,19 @@ class WagtailAPIRouter(object):
|
|||
def register_endpoint(self, name, class_):
|
||||
self._endpoints[name] = class_
|
||||
|
||||
def get_model_endpoint(self, model):
|
||||
for name, class_ in self._endpoints.items():
|
||||
if issubclass(model, class_.model):
|
||||
return name, class_
|
||||
|
||||
def get_object_detail_urlpath(self, model, pk):
|
||||
endpoint = self.get_model_endpoint(model)
|
||||
|
||||
if endpoint:
|
||||
endpoint_name, endpoint_class = endpoint[0], endpoint[1]
|
||||
url_namespace = self.url_namespace + ':' + endpoint_name
|
||||
return endpoint_class.get_object_detail_urlpath(model, pk, namespace=url_namespace)
|
||||
|
||||
def wrap_view(self, func):
|
||||
@functools.wraps(func)
|
||||
def wrapped(request, *args, **kwargs):
|
||||
|
|
|
|||
|
|
@ -13,7 +13,7 @@ from rest_framework import relations
|
|||
from wagtail.utils.compat import get_related_model
|
||||
from wagtail.wagtailcore import fields as wagtailcore_fields
|
||||
|
||||
from .utils import ObjectDetailURL, get_full_url, pages_for_site
|
||||
from .utils import get_full_url, pages_for_site
|
||||
|
||||
|
||||
class MetaField(Field):
|
||||
|
|
@ -35,7 +35,7 @@ class MetaField(Field):
|
|||
def to_representation(self, obj):
|
||||
return OrderedDict([
|
||||
('type', type(obj)._meta.app_label + '.' + type(obj).__name__),
|
||||
('detail_url', ObjectDetailURL(type(obj), obj.pk)),
|
||||
('detail_url', get_full_url(self.context['request'], self.context['router'].get_object_detail_urlpath(type(obj), obj.pk))),
|
||||
])
|
||||
|
||||
|
||||
|
|
@ -55,7 +55,7 @@ class PageMetaField(MetaField):
|
|||
def to_representation(self, page):
|
||||
return OrderedDict([
|
||||
('type', page.specific_class._meta.app_label + '.' + page.specific_class.__name__),
|
||||
('detail_url', ObjectDetailURL(type(page), page.pk)),
|
||||
('detail_url', get_full_url(self.context['request'], self.context['router'].get_object_detail_urlpath(type(page), page.pk))),
|
||||
])
|
||||
|
||||
|
||||
|
|
@ -74,7 +74,7 @@ class DocumentMetaField(MetaField):
|
|||
def to_representation(self, document):
|
||||
data = OrderedDict([
|
||||
('type', "wagtaildocs.Document"),
|
||||
('detail_url', ObjectDetailURL(type(document), document.pk)),
|
||||
('detail_url', get_full_url(self.context['request'], self.context['router'].get_object_detail_urlpath(type(document), document.pk))),
|
||||
])
|
||||
|
||||
# Add download url
|
||||
|
|
|
|||
Loading…
Reference in a new issue