Adust the as_table tag to render a pick link if appropriate
The templates are adjusted to pass on a 'reference' value, which
is the url_name of the view from which the entity should be picked.
The as_table (and related) function(s) construct and then pass on
this argument and enable takes_contex so that we have access to the
context of the enclosing template.
We only extract ReferenceProperties that end with '_link_id' since
that is how all RP's are currently named. It is not possible to
create a field with the same name as the RP, as GAE will try to
interpret it's contents as the key of an entity before even calling
any function we can override.
Patch by: Sverre Rabbelier
from django.conf import settingsfrom django.core import urlresolversfrom django.core.exceptions import ImproperlyConfigured# Attributes required in the top-level app for COMMENTS_APPREQUIRED_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 """ # Make sure the app's in INSTALLED_APPS comments_app = get_comment_app_name() if comments_app not in settings.INSTALLED_APPS: raise ImproperlyConfigured("The COMMENTS_APP (%r) "\ "must be in INSTALLED_APPS" % settings.COMMENTS_APP) # Try to import the package try: package = __import__(comments_app, '', '', ['']) except ImportError: 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 packagedef get_comment_app_name(): """ Returns the name of the comment app (either the setting value, if it exists, or the default). """ return getattr(settings, 'COMMENTS_APP', 'django.contrib.comments')def get_model(): from django.contrib.comments.models import Comment return Commentdef get_form(): from django.contrib.comments.forms import CommentForm return CommentFormdef get_form_target(): return urlresolvers.reverse("django.contrib.comments.views.comments.post_comment")def get_flag_url(comment): """ Get the URL for the "flag this comment" view. """ 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,))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,))def get_approve_url(comment): """ Get the URL for the "approve this comment from moderation" view. """ 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,))