Comment pouvez-vous rendre un modèle dans une mise en page en utilisant le langage de template liquide?

StackOverflow https://stackoverflow.com/questions/1283083

  •  16-09-2019
  •  | 
  •  

Question

Je suis en train de rendre un modèle liquide dans une disposition liquide (modèle liquide lang, pas des trucs de mise en page de liquide CSS). Je ne peux pas sembler obtenir la partie de mise en page pour rendre. Actuellement en utilisant:

assigns = {'page_name' => 'test'}
@layout = Liquid::Template.parse(File.new(@theme.layout.path).read)
@template = Liquid::Template.parse(File.new(self.template.path).read)

@rend_temp = @template.render(assigns)
@rend_layout = @layout.render({'content_for_layout' => @rend_temp})

render :text => @rend_layout, :content_type => :html

Le code HTML résultant de la page que le « modèle » rendu in fine liquide, mais il est pas entouré de la mise en page (en remplacement de « content_for_layout » dans la mise en page avec le modèle rendu)

Était-ce utile?

La solution

Juste pour quelqu'un d'autre savoir qui vient à travers ce problème, le code affiché ci-dessus ne fait le travail, la question est la variable nommée @template. Je renomme @template et @layout à @_tempalte et @_layout et tout fonctionne comme prévu.

Autres conseils

Pour l'utilisation de liquide dans Ruby on Rails (rails en particulier 3) - Je crois que la bonne façon de rendre vos modèles liquides (et aussi de maintenir tous les rails de travail est fait pour vous) est la suivante ...

Le joyau liquide lui-même fournit un liquid_view pour rails de sorte que vous pouvez câbler les rails pour chercher des modèles « liquides » lorsque vous appelez #render. Ce liquid_view ne fonctionne que pleinement avec rails 2.3 mais peut facilement être mis à jour pour fonctionner avec des rails 3 en faisant la mise à jour suivante

if content_for_layout = @view.instance_variable_get("@content_for_layout")
  assigns['content_for_layout'] = content_for_layout
elsif @view.content_for?(:layout)
  assigns["content_for_layout"] = @view.content_for(:layout)
end
assigns.merge!(local_assigns.stringify_keys)

Ceci peut être vu ici -> https://github.com/danshultz/liquid/ engager / e27b5fcd174f4b3916a73b9866e44ac0a012b182

Ensuite, pour rendre correctement votre point de vue liquide juste appeler

render :template => "index", :layout => "my_layout", :locals => { liquid_drop1 => drop, liquid_drop2 => drop }

Dans notre application, puisque nous avons une poignée d'attributs liquides communs que nous avons overriden la méthode « rendre » dans notre contrôleur de base pour inclure automatiquement la population locale par défaut en faisant référence à #liquid_view_assigns qui retroussent gouttes de liquide en outre ajouté pour l'appel rendu

def render(...)
  options[:locals] = options.fetch(:locals, {}).merge(liquid_view_assigns)
  super
end
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top