I realise going through Google that this has been hashed over before,
but nevertheless, I want to know if there is any new thought on this.
Ever since I removed project references from imports in my code, I
have noticed a new problem whereby many functions connected to signals
are being called twice. I don't know if that caused the problem, but
it seems likely because everything I've been reading tracks the
problem down to imports.

A good example is in my __init__.py for my comments application, which
is basically just a bunch of customizations to the Django comments
application. That one has no imports of any of my models in it. It is
posted below.

This is a real pain. Is there any way to make it not do this, short of
going through my code and making all my imports through the project
again? Maybe that wouldn't even help. I tried making selected imports,
e.g., through the list of installed apps in settings.py import through
the project name again but that didn't fix it, so I don't see an easy
hack.

The same thing is happening whether I'm using manage.py runserver at
home or Apache2/mod_wsgi2 on Webfaction. On Webfaction I have no
choice but to have both the project directory and the directory
containing it on my path or I get Apache 500 errors, the only way I
can make my application load is to have both on the path.

This is really awful behaviour - it's probably the ugliest wart (maybe
the only significant one, but still) I have ever found in Django, and
it sucks because my applications are using signals a lot. I hope
there's a way around it.

Stephen

from django.contrib.comments.signals import comment_will_be_posted,
comment_was_posted, comment_was_flagged
from django.contrib.comments.models import Comment
from django.contrib.sites.models import Site
from django.template import Context, loader
from django.core.mail import send_mail
from django.conf import settings

def pre_comment(sender, comment, request, **kwargs):
    if not request.user.is_authenticated:
        comment.is_removed = True

def post_comment(sender, comment, request, **kwargs):
    if comment.is_removed:
        comment.delete()
    else:
        request.session['flash'].append('Thank you for your
comments.')
        request.session.modified = True
        site = Site.objects.get_current()
        template = loader.get_template('comments/comment_email.html')
        context = Context({
                'comment': comment,
                'protocol': 'https' if request.is_secure() else
'http',
                'site': site,
            })
        send_mail("A comment was posted at %s" % site.name,
            template.render(context), getattr(settings,
'DEFAULT_FROM_EMAIL', None),
            getattr(settings, 'MODERATOR_EMAILS', None))

def flag_comment(sender, comment, flag, created, request, **kwargs):
    site = Site.objects.get_current()
    template = loader.get_template('comments/comment_flag_email.html')
    context = Context({
            'comment': comment,
            'flagged_by': request.user,
            'protocol': 'https' if request.is_secure() else 'http',
            'site': site,
        })
    send_mail("A comment was flagged by %s" % request.user.username,
        template.render(context), getattr(settings,
'DEFAULT_FROM_EMAIL', None),
        getattr(settings, 'MODERATOR_EMAILS', None))

comment_will_be_posted.connect(pre_comment, Comment)
comment_was_posted.connect(post_comment, Comment)
comment_was_flagged.connect(flag_comment, Comment)
--~--~---------~--~----~------------~-------~--~----~
You received this message because you are subscribed to the Google Groups 
"Django users" group.
To post to this group, send email to django-users@googlegroups.com
To unsubscribe from this group, send email to 
django-users+unsubscr...@googlegroups.com
For more options, visit this group at 
http://groups.google.com/group/django-users?hl=en
-~----------~----~----~----~------~----~------~--~---

Reply via email to