Получение копии и непосредственное изменение повторно используемого приложения, на мой взгляд, не очень хороший способ. Таким образом, когда вы повторно используете приложение, которое получает новые функции или исправлены его ошибки, вы не можете легко получить новую версию приложения.
Лучший способ сделать это - изменить части, которые не соответствуют вашим потребностям, переопределив их, но оставив приложение без изменений. Давайте возьмем пример приложения комментариев Django от contrib. Если у вас нет всех необходимых полей в модели комментариев, вы должны изменить ее, создав пользовательскую модель для комментариев, которая наследует оригинал, и таким образом добавить необходимые функции. Из документации:
from django.contrib.comments.models import Comment
class CommentWithTitle(Comment):
title = models.CharField(max_length=300)
Теперь я изменил приложение комментариев, и я также могу обновить источник приложения комментариев, не беспокоясь о конфликтах. Вам не нужно добавлять что-то, чтобы использовать это, оно работает так же хорошо, когда что-то избавляется или что-то меняет.
С представлениями и шаблонами, это немного плохая практика для непосредственного изменения предоставленных приложением шаблонов. Я предпочитаю делать это, фактически имея аргумент ключевого слова к представлению, определяющему шаблон. Если я хочу заменить шаблон по умолчанию своим собственным, я могу просто указать новый из конфигурации URL. Теперь мне не нужно прикасаться к представлению для изменения шаблона, и в конфигурации url ясно сказано, что я использую свой собственный вместо используемого по умолчанию.