Skip to content

Allow Template selection to be context aware (ASP.NET DisplayMode) #470

Description

@SpeedyStuart

Problem:
I need to be able to use different liquid templates based on runtime information (cookie, user-agent, etc.). Similar to DisplayMode in ASP.NET.

Whilst it is possible to provide a custom File Provider which contains this logic and returns appropriate templates, the Template Cache in FluidViewRenderer just caches templates based on path - so renders my logic useless.

Possible change

  • Add a new delegate to FluidViewEngineOptions that takes the template path and returns a Template Cache key (string)
  • Use this delegate (if present) in GetFluidTemplateAsync to generate the key for each template in the Template Cache

e.g.

// Allow templates to be cached by external factors
// Typically the rule would match any rules in custom IFileProvider implementations
// e.g. Serve different templates based on Authentication status / User Agent etc.
string cacheKey = path;
if (_fluidViewEngineOptions.TemplateCacheKeyProvider!=null)
{
    cacheKey = _fluidViewEngineOptions.TemplateCacheKeyProvider.Invoke(path);
}

if (cache.TemplateCache.TryGetValue(cacheKey, out var template))
{
    return template;
}

template = await ParseLiquidFileAsync(path, fileProvider, includeViewStarts);

cache.TemplateCache[cacheKey] = template;

return template;

Activity

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions