Одна вещь, которую вы могли бы сделать, это иметь два сопоставленных URL-адреса: один для использования третьими сторонами и один для использования вашим автономным сайтом django.
Оба URL-адреса будут отображаться в одно и то же представление django, но при этом передается другой параметр, указывающий, что вы хотите полную версию шаблона для представления или ограниченную версию без заголовка, нижних колонтитулов и других частей шаблона, которые сторонние организации не будут интересоваться.
Используйте шаблон наследование или композицию (некоторые люди будут лаять при использовании тега include , но я всегда упоминаю об этом, потому что это вариант) для создания соответствующих шаблонов - один со всеми компоненты для вашего автономного сайта django и один только с контентом, который интересует третьи стороны; и ваши представления используют один или другой в соответствии с параметром, переданным в отображенном URL.
Таким образом, третьи стороны будут использовать URL-адрес, такой как http://blah.com/thirdparty/abc/12
, где /thirdparty/abc
- это URL-адрес для третьих сторон; в то время как ваш основной сайт django будет использовать http://blah.com/abc/12
, где /abc
- это URL-адрес автономного сайта. Вы можете настроить оба вида на одно и то же представление и использовать extra-options , чтобы передать в представление параметр, указывающий, какой шаблон использовать.
Я думаю, что попытка решить проблему путем определения источника запроса является проигрышным предложением.
Надеюсь, это поможет.
PS. Ваш английский был совершенно понятен.
Edit:
Предложение по использованию StackOverflow: если вы хотите, чтобы кто-то разработал свой ответ, добавьте комментарий к своему ответу. Это пометит StackOverflow на маленьком значке электронной почты в верхней части страницы, что есть ответ, который должен проверить пользователь. Я только заметил, что вы отредактировали вопрос, потому что я проверял орфографическую ошибку в своем ответе. :-) Конечно, необходимо внести изменения в вопрос, чтобы уточнить вопрос, но всегда думайте, является ли пояснение общим или это комментарий к ответу - иногда вам нужно сделать и то, и другое! Уточните свой вопрос и добавьте комментарий к ответу, чтобы предупредить респондента об изменении.
Вернуться к рассматриваемому вопросу:
Ваш urls.py
должен выглядеть примерно так:
from django.conf.urls.defaults import *
urlpatterns = patterns('app.views',
(r'^standalone/(?P<template>\w+)/(\d{4})/$', 'view_callable'),
)
Итак, один из параметров, захваченных и отправленных в вызываемое представление (которое я образно назвал view_callable), является «шаблоном» с указанием шаблона для использования.
Теперь у вас есть два варианта:
a) Создайте два шаблона, используя наследование - так, что у одного нет верхнего / нижнего колонтитула, а второй, наследуя от первого, добавляет необходимые дополнения - и пусть представление решает, какой шаблон отображать на основе параметра шаблона из urls.py
. С помощью этого механизма каждый шаблон знает, как добавить правильный тип шаблона в URL-адреса, которые он создает. Таким образом, шаблоны, включая заголовок, будут создавать URL-адреса, передающие индикатор «complete» или «inapp» в качестве параметра «template» для urls.py
.
b) Создайте один шаблон с использованием композиции - поэтому шаблон условно включает верхний и нижний колонтитулы в зависимости от параметра, передаваемого из представления, который, в свою очередь, решил установить параметр на основе параметра шаблона из urls.py
. С помощью этого механизма шаблон знает, как добавить правильный тип шаблона в URL-адреса, которые он создает, просматривая параметр, установленный представлением.
Преимущество а) в том, что вы можете создавать совершенно разные стили для своих автономных и сторонних шаблонов. Кроме того, если вы работаете с двумя шаблонами, может быть выгодно разбить urls.py
на два URL для каждого просмотра; как:
from django.conf.urls.defaults import *
urlpatterns = patterns('app.views',
(r'^standalone/standalone/(\d{4})/$', 'view_callable', {'template':'complete'}),
(r'^standalone/thirdparty/(\d{4})/$', 'view_callable', {'template':'thirdparty'}),
)
Это позволит вам выполнять reverse () вызовов в представлениях или url вызовов в шаблонах и динамически создавать ссылки.
Преимущество б) в том, что у вас есть только один шаблон для обслуживания. Нет риска обновить одно и забыть о другом.
Чтобы ответить на ваш второй подвопрос, я думаю, мне нужен пример, чтобы понять, что вы имеете в виду ...
Помните, что, возможно, есть и другие способы сделать это. Я так и думал.