Donc, après la mise à niveau vers Django 1.9, j'ai ce problème étrange avec ListViews et correspondance d'URL. Tout fonctionne très bien dans le développement, mais mon point de vue qui 404s jeter sous-classe ListView dans la production (CherryPy/IIS utilisant FORCE_SCRIPT_NAME = '/ projet):Page Django ListView non trouvé
404 msg d'erreur:
Using the URLconf defined in project.urls, Django tried these URL patterns, in this order:
1. ^$ [name='home']
2. ^things/
3. ^otherstuff/
The current URL, project/things/, didn't match any of these.
principal du projet urls.py:
urlpatterns = [
url(r'^$', RedirectView.as_view(url=reverse_lazy("start")), name="home"),
url(r'^things/', include('things.urls')),
url(r'^otherstuff/', include('otherstuff.urls'))
]
choses urls.py:
urlpatterns = [
url(r'^start/$', views.Start.as_view(), name="start"),
url(r'^dashboard/$', views.Dashboard.as_view(), name="dashboard"),
url(r'^stats/$', views.Statistics.as_view(), name="statistics"),
# --- Trouble here ---
url(r'^$', views.AllThingsList.as_view(), name="all-things"),
url(r'^sublistthings/$', views.ThingsSubList.as_view(), name="sub-list-things"),
# --- End trouble ---
url(r'^selectthing/$', views.SelectThing.as_view(), name="select-thing"),
url(r'^(?P<pk>\d+)/$', views.Thing.as_view(), name="thing")
]
Chaque URL correspond bien, excep t pour ceux que j'ai marqué comme problème. Les vues relatives à ces urls étendent la classe suivante:
class BaseThingsListView(ListView):
def get(self, request, *args, **kwargs):
"""
return regular list view on page load and then json data on
datatables ajax request.
"""
...
self.object_list = self.get_queryset()
# --- Trouble here ---
if not self.request.is_ajax():
return super(BaseThingsListView, self).get(request, *args, **kwargs)
# --- End Trouble ---
...
context = {ajax_stuff}
return HttpResponse(json.dumps(context), content_type='application/json')
# Other methods include:
def get_table_context_data(self, **kwargs):
def get_context_data(self, *args, **kwargs):
def get_header_for_field(self, field):
def set_page(self):
def get_paginate_by(self, queryset):
def get_queryset(self):
def filter_queryset(self, qs):
def order_queryset(self, qs):
def get_rows(self, objects):
def format_col(self, field, obj):
def set_query_params(self):
Si je commente la partie troublée ci-dessus, un objet ajax est retourné comme prévu et aucune 404 jeté. Notez également que allow_empty
est True, ce qui déclencherait un message d'erreur différent de toute façon.
Alors qu'est-ce qu'il y a sur le fait de retourner getView() de ListViews qui ne le produit qu'en production? Ou est le problème ailleurs?
UPDATE:
A django.core.urlresolvers.Resolver404
est généré in \ django \ TEMPLATE \ backends \ line django.py 95 dans la classe modèle (objet):
return self.template.render(context)
... qui prend le débogueur et génère le trompeur 404 msg. Mes chargeurs de gabarits pourraient-ils être mal réglés? Je ne sais vraiment pas où aller à partir d'ici.
Oops, la première erreur était celle que je fis la transcrivant code à ici. 'script_name' est ajouté lors de l'utilisation de FORCE_SCRIPT_NAME. J'ai édité pour montrer quelque chose qui a plus de sens. – Bott0610