【问题标题】:Change variables beetween urls and view更改 URL 和视图之间的变量
【发布时间】:2011-07-08 08:11:13
【问题描述】:

这是否可以在被 url 调度程序捕获并将其传递给视图更改后更改变量?

例如: 我有以下 urlpattern

urlpatterns = patterns('',
    (r'^articles/(?P<article_id>\d+)/$', 'article.views.article_view'),
)

我想在传递给article.views.article_view之前更改article_id

我需要这个,作为替代。我有无法更改的article 应用程序,但我必须使用它。 :-/

【问题讨论】:

    标签: django django-views django-urls


    【解决方案1】:

    使用包装视图。将 URL 映射到您自己的视图,然后调用 article.views.article_view。然后,您可以在包装视图中更改您想要的任何内容。

    例子:

    urlpatterns = patterns('',
        (r'^articles/(?P<article_id>\d+)/$', 'article_wrapper.wrap_article_view'),
    )
    

    article_wrapper.py:

    import article
    def wrap_article_view(request, article_id):
        article_id = modify_it(article_id)
        return article.views.article_view(request, article_id)
    

    更新:

    如果您需要为多个视图执行相同的article_id 翻译,您可以使包装器更通用。示例:

    urlpatterns = patterns('',
        url(r'^articles/(?P<article_id>\d+)/$', 
            view='article_wrapper.generic_article_wrapper',
            kwargs={'view_name':'article_view'}
        ),
    )
    

    article_wrapper.py:

    import article
    def generic_article_wrapper(request, article_id, view_name=None):
        article_id = modify_it(article_id)
        try:
            view = get_attr(article.views, view_name)
        except AttributeError:
            # handle invalid view name
        return view(request, article_id)
    

    【讨论】:

      【解决方案2】:
      from article.views import article_view
      
      def my_article_view(request, article_id):
          my_id = article_id * 2 # modify your id
          return article_view(request, my_id)
      

      【讨论】:

        猜你喜欢
        • 2013-09-26
        • 1970-01-01
        • 2021-12-20
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2012-10-12
        • 1970-01-01
        相关资源
        最近更新 更多