Проблема с обратным URL в Django и Tastypie - PullRequest
7 голосов
/ 28 июля 2011

Мы портируем наш API с Django - Piston на Django-TastyPie. Все прошло гладко, пока мы не дошли до этого:

urls.py из приложения

 url(r'^upload/', Resource(UploadHandler, authentication=KeyAuthentication()), name="api-upload"),
    url(r'^result/(?P<uuid>[^//]+)/', Resource(ResultsHandler, authentication=KeyAuthentication()), name="api-result")

Используется поршень, поэтому мы хотим изменить его на вкусный. Пирог

url(r'^upload/', include(upload_handler.urls), name="api-upload"),
url(r'^result/(?P<uuid>[^//]+)/', include(results_handler.urls), name="api-result")

Но мы застряли на этой вине

Обратное для 'api-result' с аргументами '()' и аргументами ключевых слов '{' uuid ':' fbe7f421-b911-11e0-b721-001f5bf19720 '}' не найдено.

И Страница отладки результата:

Используя URLconf, определенный в MelodyService.urls, Django попробовал эти шаблоны URL в следующем порядке:

^ melotranscript / ^ upload / ^ melotranscript / ^ result / (? P [^ //] +) / ^ (? Presultshandler) / $ [name = 'api_dispatch_list'] ^ melotranscript / ^ result / (? P [^ //] +) / ^ (? Presultshandler) / schema / $ [name = 'api_get_schema'] ^ melotranscript / ^ result / (? P [^ //] +) / ^ (? Presultshandler) / set / (? P \ w [\ w /; -] *) / $ [name = 'api_get_multiple'] ^ melotranscript / ^ result / (? P [^ //] +) / ^ (? Presultshandler) / (? P \ w [\ w / -] *) / $ [name = 'api_dispatch_detail'] ^ мелотранскрипт / ^ обработано / (? P. ) $ ^ Админ / DOC / ^ TOU / $ [name = 'TOU'] ^ $ [name = 'index'] ^ Админ / ^ Док / (? П. ) $ Текущий URL-адрес melotranscript / result / fbe7f421-b911-11e0-b721-001f5bf19720 / не соответствует ни одному из них.

Кто-то, кто знает проблему? Это может быть действительно глупый / нубистский вопрос ...

Ответы [ 3 ]

35 голосов
/ 26 ноября 2011

Для будущих посетителей, у которых возникла эта проблема, имя URL будет api_dispatch_list, и вам также необходимо указать имя API:

url = reverse('api_dispatch_list', kwargs={'resource_name': 'myresource', 'api_name': 'v1'})

Существуют другие имена URL , которыеTastypie также предоставляет :

/schema/   -->  api_get_schema
/set/      -->  api_get_multiple
/$your-id/ -->  api_dispatch_detail

Вы можете использовать их в вызове для реверса, вы можете использовать их в своем HTML, например:

{% url "api_get_schema" resource_name="myresource" api_name="v1" %}
3 голосов
/ 24 сентября 2011

Django 'include' не поддерживает имена. Имена URL-адресов Tastypie, которые вы можете найти в https://github.com/toastdriven/django-tastypie/blob/master/tastypie/resources.py: Resource.base_urls ()

0 голосов
/ 22 февраля 2014

Я не могу писать комментарии, поэтому я должен опубликовать здесь, чтобы включить его в свой шаблон, вы должны сделать

{% url "api_dispatch_list" resource_name="app_name" api_name='v1' %}?format=json

или в моем случае это работает ТОЛЬКО без API-части

{% url "api_dispatch_list" resource_name="app_name" %}?format=json

чтобы получить список доступных URL вашего ресурса, импортируйте ваш ресурс из оболочки Python, затем выполните следующую команду

for url in ExampleResource().urls:
    print(url.name)

, вы должны получить что-то вроде этого

api_dispatch_list
api_get_schema
api_get_multiple
api_dispatch_detail

Для получения дополнительной информациидетали или, если вы используете пространство имен, отметьте это https://github.com/toastdriven/django-tastypie/issues/409

...