Включение функции повторного просмотра в несколько представлений? - PullRequest
0 голосов
/ 06 марта 2012

У меня есть следующая функция во многих представлениях многих моих приложений. Как следующее:

def json_response(data):
    return HttpResponse(
        simplejson.dumps(data),
        content_type = 'application/json; charset=utf8'
    )

Как бы я включил это в views.py всех моих приложений? Определить его в одном приложении и просто импортировать из него?

from main.global import simplejson

Кроме того, есть ли страница github хорошо организованного проекта django, на которую я могу посмотреть?

Ответы [ 2 ]

1 голос
/ 06 марта 2012

Если вы используете django 1.3, для абстрагирования этой функции можно использовать представление на основе классов.Вы просто расширили бы свое представление из базового представления, которое возвратило бы json того, что было передано. Вы сохранили бы файл с этим классом в некотором общем месте (как описано в ответе, связанном с комментарием Ignacio).

На самом деле, это один из примеров типов в документации для представлений на основе классов :

from django import http
from django.utils import simplejson as json

class JSONResponseMixin(object):
    def render_to_response(self, context):
        "Returns a JSON response containing 'context' as payload"
        return self.get_json_response(self.convert_context_to_json(context))

    def get_json_response(self, content, **httpresponse_kwargs):
        "Construct an `HttpResponse` object."
        return http.HttpResponse(content,
                                 content_type='application/json',
                                 **httpresponse_kwargs)

    def convert_context_to_json(self, context):
        "Convert the context dictionary into a JSON object"
        # Note: This is *EXTREMELY* naive; in reality, you'll need
        # to do much more complex handling to ensure that arbitrary
        # objects -- such as Django model instances or querysets
        # -- can be serialized as JSON.
        return json.dumps(context)

Вот как вы могли бы использовать его (также из документации):

class HybridDetailView(JSONResponseMixin,
                       SingleObjectTemplateResponseMixin, BaseDetailView):
    def render_to_response(self, context):
        # Look for a 'format=json' GET argument
        if self.request.GET.get('format','html') == 'json':
            return JSONResponseMixin.render_to_response(self, context)
        else:
            return SingleObjectTemplateResponseMixin.render_to_response(self, context)
0 голосов
/ 06 марта 2012

Да, вы можете просто определить его в одном представлении, в файле утилит или в любом другом виде и просто импортировать его во все ваши представления. Я часто делаю это с вездесущими функциями.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...