Index: django/contrib/comments/admin.py =================================================================== --- django/contrib/comments/admin.py (revision 9084) +++ django/contrib/comments/admin.py (working copy) @@ -2,6 +2,7 @@ from django.conf import settings from django.contrib.comments.models import Comment from django.utils.translation import ugettext_lazy as _ +from django.contrib.comments import get_model class CommentsAdmin(admin.ModelAdmin): fieldsets = ( @@ -22,4 +23,5 @@ ordering = ('-submit_date',) search_fields = ('comment', 'user__username', 'user_name', 'user_email', 'user_url', 'ip_address') -admin.site.register(Comment, CommentsAdmin) +if get_model() is Comment: + admin.site.register(Comment, CommentsAdmin) Index: django/contrib/comments/__init__.py =================================================================== --- django/contrib/comments/__init__.py (revision 9084) +++ django/contrib/comments/__init__.py (working copy) @@ -2,9 +2,6 @@ from django.core import urlresolvers from django.core.exceptions import ImproperlyConfigured -# Attributes required in the top-level app for COMMENTS_APP -REQUIRED_COMMENTS_APP_ATTRIBUTES = ["get_model", "get_form", "get_form_target"] - def get_comment_app(): """ Get the comment app (i.e. "django.contrib.comments") as defined in the settings @@ -22,13 +19,6 @@ raise ImproperlyConfigured("The COMMENTS_APP setting refers to "\ "a non-existing package.") - # Make sure some specific attributes exist inside that package. - for attribute in REQUIRED_COMMENTS_APP_ATTRIBUTES: - if not hasattr(package, attribute): - raise ImproperlyConfigured("The COMMENTS_APP package %r does not "\ - "define the (required) %r function" % \ - (package, attribute)) - return package def get_comment_app_name(): @@ -39,14 +29,20 @@ return getattr(settings, 'COMMENTS_APP', 'django.contrib.comments') def get_model(): + if get_comment_app_name() != __name__ and hasattr(get_comment_app(), "get_model"): + return get_comment_app().get_model() from django.contrib.comments.models import Comment return Comment def get_form(): + if get_comment_app_name() != __name__ and hasattr(get_comment_app(), "get_form"): + return get_comment_app().get_form() from django.contrib.comments.forms import CommentForm return CommentForm def get_form_target(): + if get_comment_app_name() != __name__ and hasattr(get_comment_app(), "get_form_target"): + return get_comment_app().get_form_target() return urlresolvers.reverse("django.contrib.comments.views.comments.post_comment") def get_flag_url(comment): @@ -55,17 +51,15 @@ """ if get_comment_app_name() != __name__ and hasattr(get_comment_app(), "get_flag_url"): return get_comment_app().get_flag_url(comment) - else: - return urlresolvers.reverse("django.contrib.comments.views.moderation.flag", args=(comment.id,)) + return urlresolvers.reverse("django.contrib.comments.views.moderation.flag", args=(comment.id,)) def get_delete_url(comment): """ Get the URL for the "delete this comment" view. """ if get_comment_app_name() != __name__ and hasattr(get_comment_app(), "get_delete_url"): - return get_comment_app().get_flag_url(get_delete_url) - else: - return urlresolvers.reverse("django.contrib.comments.views.moderation.delete", args=(comment.id,)) + return get_comment_app().get_delete_url(comment) + return urlresolvers.reverse("django.contrib.comments.views.moderation.delete", args=(comment.id,)) def get_approve_url(comment): """ @@ -73,5 +67,4 @@ """ if get_comment_app_name() != __name__ and hasattr(get_comment_app(), "get_approve_url"): return get_comment_app().get_approve_url(comment) - else: - return urlresolvers.reverse("django.contrib.comments.views.moderation.approve", args=(comment.id,)) + return urlresolvers.reverse("django.contrib.comments.views.moderation.approve", args=(comment.id,)) Index: docs/ref/contrib/comments/index.txt =================================================================== --- docs/ref/contrib/comments/index.txt (revision 9084) +++ docs/ref/contrib/comments/index.txt (working copy) @@ -175,6 +175,8 @@