The logic in this function's a little confusing/redundant, and could probably use a comment to explain why it's being done this way. How about:

    if c.site.over_18 and not c.over18:
        # Don't show text from over18 subreddits if the user isn't
        submit_text = None
    else:
        submit_text = c.site.submit_text
    return {'submit_text': submit_text,
            'submit_text_html': safemarkdown(submit_text)}