2013-05-03 5 views
0

Итак, я довольно новичок в Django и создаю несколько простых сайтов. Сейчас я пытаюсь создать веб-сайт, который можно использовать для размещения некоторых других моих приложений. На данный момент основной сайт отображает навигацию, передавая словарь имен/URL-адресов в шаблон. Например, это views.py основного веб-сайта:Передача контекстов django между приложениями

from django.shortcuts import render_to_response 

navbar = [{'Home': '/'}, 
      {'Apps': '/apps/'}, 
      {'Dropdown': '', 
      'Google': 'http://www.google.com', 
      'Stackoverflow': 'http://www.stackoverflow.com'}] 

context = {'navbar': navbar} 


def home(request): 
    return render_to_response("website/home.html", context) 


def apps(request): 
    return render_to_response("website/applist.html", context) 

Что это приводит одновременно и вид дома и посмотреть список приложений имеют навигационную панель, содержащую ссылку на website.com/, website.com/ apps /, а также выпадающий список с надписью «Dropdown», содержащий ссылки на google и stackoverflow.

Моя проблема в том, что я создал другое приложение со своими собственными представлениями, которые отображают другие шаблоны, используя его собственные значения контекста. Так, например, он может использовать:

def appview(request): 
    ## view logic... 
    context = {"users": users, "comments": comments} 
    render_to_response("app/response.html", context) 

Если бы я захотел, я мог бы переключиться на приложение, чтобы принять аргумент, который заменит «приложение/response.html» с «сайта/apprender.html», т.е. :

def appview(request, template): 
    ## view logic... 
    context = {"users": users, "comments": comments} 
    render_to_response(template, context) 

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

def appview(request, template, context): 
    ## view logic... 
    context["users"] = users 
    context["comments"] = comments 
    render_to_response(template, context) 

, но я хочу знать, что лучше практика. Итак, что является лучшей практикой?

ответ

0

Лучшая практика для обработки чего-либо спорна. При создании navbar я бы предложил один из следующих вариантов:

  • Внедрение навигатора в качестве шаблона. Templatetags можно загружать в любой шаблон и создавать согласованный навигатор по всему проекту или просто включаться в base.html. Если вы хотите подключиться к этой навигационной панели, вы можете сделать это, разрешив templatetag пометить параметр, который будет списком дополнительных меню, или значения дельта для существующей структуры меню.

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