request.PYLUCID.pagemeta = pagemeta # Changeable by plugin/get view or will be removed with PageContent instance request.PYLUCID.updateinfo_object = pagemeta # object2comment - The Object used to attach a pylucid_comment # should be changed in plugins, e.g.: details views in blog, lexicon plugins request.PYLUCID.object2comment = pagemeta # Check the language code in the url, if exist if url_lang_code and (not is_plugin_page) and (url_lang_code.lower() != pagemeta.language.code.lower()): # The language code in the url is wrong. e.g.: The client followed a external url with was wrong. # Note: The main_manu doesn't show links to not existing PageMeta entries! # change only the lang code in the url: new_url = i18n.change_url(request, new_lang_code=pagemeta.language.code) if settings.DEBUG or settings.PYLUCID.I18N_DEBUG: messages.error(request, "Language code in url %r is wrong! Redirect to %r." % (url_lang_code, new_url) ) # redirect the client to the right url return http.HttpResponsePermanentRedirect(new_url) # Create initial context object request.PYLUCID.context = context = RequestContext(request) # it will be filled either by plugin or by PageContent: context["page_content"] = None # call a pylucid plugin "html get view", if exist
def render_page(request, url_lang_code, url_path): """ render a PageContent page """ path_info = request.PYLUCID.path_info pagetree = request.PYLUCID.pagetree pagemeta = request.PYLUCID.pagemeta # Should never happen, because all Plugin Pages should be catched # in url.py before assert pagetree.page_type == PageTree.PAGE_TYPE url_lang_code = path_info.url_lang_code # Check the language code in the url, if exist if url_lang_code.lower() != pagemeta.language.code.lower(): # The language code in the url is wrong. e.g.: The client followed a external url with was wrong. # Note: The main_manu doesn't show links to not existing PageMeta entries! # change only the lang code in the url: new_url = i18n.change_url(request, new_lang_code=pagemeta.language.code) if settings.DEBUG or settings.PYLUCID.I18N_DEBUG: messages.error(request, "Language code in url %r is wrong! Redirect to %r." % (url_lang_code, new_url) ) # redirect the client to the right url return http.HttpResponsePermanentRedirect(new_url) # Create initial context object context = request.PYLUCID.context = RequestContext(request) # it will be filled either by plugin or by PageContent: context["page_content"] = None # call a pylucid plugin "html get view", if exist get_view_response = PYLUCID_PLUGINS.call_get_views(request) if isinstance(get_view_response, http.HttpResponse): # Plugin would be build the complete html page return get_view_response elif isinstance(get_view_response, basestring): # Plugin replace the page content context["page_content"] = get_view_response elif get_view_response is not None: # Use plugin response raise # Should never happen here, because PYLUCID_PLUGINS.call_get_views() should raise before if context["page_content"] is None: # Plugin has not filled the page content pagecontent_instance = _get_page_content(request) request.PYLUCID.pagecontent = request.PYLUCID.updateinfo_object = pagecontent_instance context["page_content"] = apply_markup( pagecontent_instance.content, pagecontent_instance.markup, request ) # put update information into context for itemname in ("createby", "lastupdateby", "createtime", "lastupdatetime"): context["page_%s" % itemname] = getattr(request.PYLUCID.updateinfo_object, itemname, None) # Render django tags in PageContent with the global context context["page_content"] = render.render_string_template(context["page_content"], context) template_name = context["base_template_name"] # Added in pylucid.context_processors page_template = loader.get_template(template_name) pre_render_global_template.send(sender=None, request=request, page_template=page_template) # Render django tags in global template with global context complete_page = page_template.render(context) # create response object response = http.HttpResponse(complete_page, mimetype="text/html") response["content-language"] = context["page_language"] return response
else: existing_languages = Language.objects.all_accessible(user) try: lang_entry = existing_languages.get(code=raw_lang_code) except Language.DoesNotExist, err: if debug: messages.error(request, "Wrong lang code in get parameter: %s" % err) return i18n.activate_language(request, lang_entry, save=True) current_pagemeta = request.PYLUCID.pagemeta if current_pagemeta.language == lang_entry: if debug: messages.info(request, "Current page is in right language. No redirect needed.") return pagetree = request.PYLUCID.pagetree try: pagemeta = PageMeta.objects.get(pagetree=pagetree, language=lang_entry) except PageMeta.DoesNotExist, err: if debug: messages.info(request, "PageMeta doesn't exist in lang %r. So no redirect needed." % lang_entry) return # change only the lang code in the url: new_url = i18n.change_url(request, new_lang_code=pagemeta.language.code, save_get_parameter=False) # redirect, so the new selected language would be used return HttpResponseRedirect(new_url)
def render_page(request, url_lang_code, url_path): """ render a PageContent page """ path_info = request.PYLUCID.path_info pagetree = request.PYLUCID.pagetree pagemeta = request.PYLUCID.pagemeta # Should never happen, because all Plugin Pages should be catched # in url.py before assert pagetree.page_type == PageTree.PAGE_TYPE url_lang_code = path_info.url_lang_code # Check the language code in the url, if exist if url_lang_code.lower() != pagemeta.language.code.lower(): # The language code in the url is wrong. e.g.: The client followed a external url with was wrong. # Note: The main_manu doesn't show links to not existing PageMeta entries! # change only the lang code in the url: new_url = i18n.change_url(request, new_lang_code=pagemeta.language.code) if settings.DEBUG or settings.PYLUCID.I18N_DEBUG: messages.error( request, "Language code in url %r is wrong! Redirect to %r." % (url_lang_code, new_url)) # redirect the client to the right url return http.HttpResponsePermanentRedirect(new_url) # Create initial context object context = request.PYLUCID.context = RequestContext(request) # it will be filled either by plugin or by PageContent: context["page_content"] = None # call a pylucid plugin "html get view", if exist get_view_response = PYLUCID_PLUGINS.call_get_views(request) if isinstance(get_view_response, http.HttpResponse): # Plugin would be build the complete html page return get_view_response elif isinstance(get_view_response, basestring): # Plugin replace the page content context["page_content"] = get_view_response elif get_view_response is not None: # Use plugin response raise # Should never happen here, because PYLUCID_PLUGINS.call_get_views() should raise before if context["page_content"] is None: # Plugin has not filled the page content pagecontent_instance = _get_page_content(request) request.PYLUCID.pagecontent = request.PYLUCID.updateinfo_object = pagecontent_instance context["page_content"] = apply_markup(pagecontent_instance.content, pagecontent_instance.markup, request) # put update information into context for itemname in ("createby", "lastupdateby", "createtime", "lastupdatetime"): context["page_%s" % itemname] = getattr( request.PYLUCID.updateinfo_object, itemname, None) # Render django tags in PageContent with the global context context["page_content"] = render.render_string_template( context["page_content"], context) template_name = context[ "base_template_name"] # Added in pylucid.context_processors page_template = loader.get_template(template_name) pre_render_global_template.send(sender=None, request=request, page_template=page_template) # Render django tags in global template with global context complete_page = page_template.render(context) # create response object response = http.HttpResponse(complete_page, mimetype="text/html") response["content-language"] = context["page_language"] return response