【问题标题】:Django URL.py advanced usage. How to utilize an own functions in url.py?Django URL.py 高级用法。如何在 url.py 中使用自己的函数?
【发布时间】:2016-08-26 14:47:32
【问题描述】:

我们的网站有一个主要实体 - 城市。首先,用户从 dropDownList 中选择一个城市(站点将其存储在会话中),然后通过 /CITY/APP_NAME 使用站点的应用程序,例如。 www.mysite.com**/kyiv/**petitions/add.

我想从一个 url 中捕获一个城市蛞蝓并将其存储到会话中。为此,我有如下 url.py:

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

和 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),
]

我的问题是 - 如何缓存 city slug 并将其直接从 url_modules.py 放入会话中,例如:

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

【问题讨论】:

  • 不清楚你在问什么。为什么要在会话中使用它?并且需要重要的是为什么要在网址中这样做?这就是你会在视图中做的事情。

标签: django url


【解决方案1】:

您无法通过 url 执行此操作,但您可以通过中间件或基于每个视图(或您在多个视图中使用的 mixin)来执行此操作。 Here's an example with accessing url arguments from middleware 这正是你想要的。

它会是这样的:

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

当 url 中没有城镇蛞蝓(想想主页)时,缓存和替代逻辑取决于你。

【讨论】:

  • 谢谢!我一定会尝试这个解决方案!
猜你喜欢
  • 2010-11-21
  • 1970-01-01
  • 1970-01-01
  • 2011-03-07
  • 1970-01-01
  • 2012-04-29
  • 1970-01-01
  • 1970-01-01
  • 2021-12-04
相关资源
最近更新 更多