2016-05-01 2 views
0

Unsere Website hat eine Haupteinheit - Stadt. Zuerst wählt ein Benutzer eine Stadt aus dropDownList aus (die Site speichert sie in der Sitzung) und verwendet dann die Apps der Site über/CITY/APP_NAME, z. www.mysite.com **/kyiv/** Petitionen/hinzufügen.Django URL.py erweiterte Verwendung. Wie benutzt man eigene Funktionen in url.py?

Ich möchte eine Stadt Slug von einer URL abfangen und speichern sie zu einer Sitzung. Um dies zu tun, ich habe url.py wie unten:

url(r'(?P<townslug>[a-z]+)/',include(urls_modules)), 

und url_modules.py

urlpatterns = [ 
    url(r'^$', views.index, name="index"), 
    url(r'^edata/', include('edata.urls', namespace="edata")), 
    url(r'^crowdfunding/', include('crowdfunding.urls')), 
    url(r'^petitions/', include('petitions.urls', namespace="petitions")), 
    url(r'^budget/', views.budget, name="budget"), 
    url(r'^partners', views.partners), 
] 

Meine Frage ist - wie Stadt Slug zwischenzuspeichern und steckte es in die Sitzung direkt aus url_modules.py wie :

 request.session["town"] = Town.objects.get(slug=townslug).id 
    request.session["town_name"]= Town.objects.get(slug=townslug).name 
+0

Es ist nicht klar, was Sie fragen. Warum willst du es in der Sitzung? Und was wichtig ist, warum willst du das in den URLs machen? Das würden Sie in der Ansicht tun. –

Antwort

1

Sie können aus der Urls nicht tun, aber Sie können es über eine Middleware oder auf einer per-view-Basis (oder ein mixin Sie in mehreren Ansichten verwenden) tun. Here's an example with accessing url arguments from middleware was genau Sie wollen. so etwas wie diese

Es würde gehen:

class TownSessionMiddleware(object): 
    def process_view(self, request, view_func, view_args, view_kwargs) 
     self.set_session_town(request, view_kwargs.get('townslug')) 

    def set_session_town(self, request, slug): 
     if slug: 
      town = Town.objects.get(slug=slug) 
      request.session["town"] = town.id 
      request.session["town_name"]= town.name 

Caching und alternative Logik, wenn es in der URL (man denke Startseite) keine Stadt Slug ist bis zu Ihnen.

+0

Danke! Ich werde diese Lösung sicherlich versuchen! – Riko

Verwandte Themen