Mam model Django z dużą liczbą pól i 20000 wierszami tabeli. Aby ułatwić czytelne dla człowieka adresy i zdolność do rozbicia dużą listę do arbitralnych podlist chciałbym mieć adres URL, który wygląda tak:Django: dowolna liczba nienazwanych parametrów urls.py
/browse/<name1>/<value1>/<name2>/<value2>/ .... etc ....
gdzie mapy „name” do atrybutu modelu i „wartość” to kryteria wyszukiwania dla tego atrybutu. Każda "nazwa" będzie traktowana jak kategoria, która zwróci podzestawy instancji modelu, w których kategorie się zgadzają.
Teraz można to obsłużyć za pomocą parametrów GET, ale wolę bardziej czytelne adresy URL zarówno dla użytkownika, jak i dla wyszukiwarek. Te podzbiory adresów URL będą osadzone na każdej stronie wyświetlającej ten model, więc warto wykonać ładny URL.
Idealnie każda para nazwa/wartość zostanie przekazana do funkcji widoku jako parametr o nazwie name1
, name2
itp. Jednak nie sądzę, że możliwe jest zdefiniowanie nazwanych wzorców za pomocą dopasowanego tekstu wyrażeń regularnych. Czy jestem w błędzie?
Więc wydaje się, że trzeba zrobić coś takiego:
urlpatterns = patterns('',
url(r'^browse/(?:([\w]+)/([\w]+)/)+$', 'app.views.view', name="model_browse"),
)
Wydaje powinno to dało żadnych zestawów dwóch par nazwa/wartość. Mimo że pasuje do niego pomyślnie, przekazuje on tylko ostatnią parę nazwa/wartość jako parametry do funkcji widoku. Domyślam się, że każdy mecz nadpisuje poprzedni mecz. Zgodnie z przypuszczeniem, że zawiera (?: ...) + powoduje to, próbowałem prosty powtarzający się wzór Zamiast:
urlpatterns = patterns('',
url(r'^browse/([\w]+/)+$', 'app.views.view', name="model_browse"),
)
... i mam ten sam problem, ale tym razem *args
obejmuje tylko ostatnie dopasowany wzór.
Czy jest to ograniczenie dla modułu Django do wywoływania adresów URL i/lub obsługi regex w języku Python? Wygląda na to, że jedna z tych metod powinna działać. Czy istnieje sposób, aby to osiągnąć bez zakodowania na sztywno każdego możliwego atrybutu modelu w adresie URL jako opcjonalnego wzorca (. *)?
myślę, że wdrożenie „GET zapytania jak” params klucz-wartość używając url sam w sobie jest nieco brzydki, a nie „true”. –
@alex - oprócz tego, że URL nie jest czytelny, wyszukiwarki prawdopodobnie nie będą indeksować całej zawartości, jeśli masz więcej niż kilka parametrów get (jeśli tak). –