Django Integration¶
Contents¶
Views¶
Indexing¶
Generic, re-usable views for use with Fedora-based Django
projects. These views expose data intended for use with
eulindexer
. These views currently return data in JSON form.
Projects that use this module should include the following settings in their
settings.py
:
# Index server url. In this example case, we are wish to push data to a Solr instance.
SOLR_SERVER_URL = "http://localhost:8983/solr/"
# IPs that will be allowed to access the indexdata views
EUL_INDEXER_ALLOWED_IPS = "ANY" #Or put in a list such as ("127.0.0.1", "127.0.0.2")
# OPTIONAL SETTING: A list of lists of content models you want this application to index.
# If this setting is missing, the code will automatically detect all content
# models the application is using. In this example, it will index items with BOTH
# content-model_1 and content-model_2 as well as those that have just content-model_3.
EUL_INDEXER_CONTENT_MODELS = "[['content-model_1', 'content-model_2'], ['content-model_3']]"
To use these views in your eulfedora
-based application, make
sure that eulfedora
is included in INSTALLED_APPS in your settings.py
:
INSTALLED_APPS = (
'eulfedora'
# Additional installed applications here,
)
And then bind the indexdata views to a url in your application
urls.py
:
from django.conf.urls import *
urlpatterns = patterns('',
url(r'^indexdata/', include('eulfedora.indexdata.urls', namespace='indexdata')),
# Additional url patterns here,
)
An example Solr schema with fields defined for all the index values
exposed in the default
index_data()
method is included
with eulfedora.indexdata
to be used as a starting point for
applications.
-
eulfedora.indexdata.views.
index_config
(request)¶ This view returns the index configuration of the current application as JSON. Currently, this consists of a Solr index url and the Fedora content models that this application expects to index.
Note
By default, Fedora system content models (such as
fedora-system:ContentModel-3.0
) are excluded. Any application that actually wants to index such objects will need to customize this view to include them.
-
eulfedora.indexdata.views.
index_data
(request, id, repo=None)¶ Return the fields and values to be indexed for a single object as JSON. Index content is generated via
eulfedora.models.DigitalObject.index_data()
.Parameters: id – id of the object to be indexed; in this case a Fedora pid
Management commands¶
The following management commands will be available when you include
eulfedora
in your django INSTALLED_APPS
and rely on the
existdb settings described above.
For more details on these commands, use manage.py <command> help
- syncrepo - load simple content models and fixture object to the configured fedora repository
Template tags¶
eulfedora
adds custom template tags
for use in templates.
fedora_access¶
Catch fedora failures and permission errors encountered during template rendering:
{% load fedora %}
{% fedora_access %}
<p>Try to access data on fedora objects which could be
<span class='{{ obj.inaccessible_ds.content.field }}'>inaccessible</span>
or when fedora is
<span class='{{ obj.regular_ds.content.other_field }}'>down</span>.</p>
{% permission_denied %}
<p>Fall back to this content if the main body results in a permission
error while trying to access fedora data.</p>
{% fedora_failed %}
<p>Fall back to this content if the main body runs into another error
while trying to access fedora data.</p>
{% end_fedora_access %}
The permission_denied
and fedora_failed
sections are optional. If
only permission_denied
is present then non-permission errors will result
in the entire block rendering empty. If only fedora_failed
is present
then that section will be used for all errors whether permission-related or
not. If neither is present then all errors will result in the entire block
rendering empty.
Note that when Django’s TEMPLATE_DEBUG
setting is on, it precludes all
error handling and displays the Django exception screen for all errors,
including fedora errors, even if you use this template tag. To disable this
Django internal functionality and see the effects of the fedora_access
tag, add the following to your Django settings:
TEMPLATE_DEBUG = False