

@menu_item(MenuItem.BESTIARY)
@submenu_item(MenuItem.Bestiary.MONSTERS)
def monster_detail(request, rulebook_slug, rulebook_id, monster_slug, monster_id):
    monster = get_object_or_404(Monster.objects.select_related('rulebook', 'rulebook__dnd_edition', 'size', 'type'), pk=monster_id)
    if ((monster.slug != monster_slug) or (unicode(monster.rulebook.id) != rulebook_id) or (monster.rulebook.slug != rulebook_slug)):
        return permanent_redirect_object(request, monster)
    assert isinstance(monster, Monster)
    monster_speeds = monster.monsterspeed_set.select_related('type').all()
    monster_subtypes = monster.subtypes.all()
    monster_skills = monster.skills.select_related('skill').all()
    monster_feats = monster.feats.select_related('feat', 'feat__rulebook').all()
    return render_to_response('dnd/monsters/monster_detail.html', {
        'monster': monster,
        'rulebook': monster.rulebook,
        'request': request,
        'monster_speeds': monster_speeds,
        'monster_subtypes': monster_subtypes,
        'monster_skills': monster_skills,
        'monster_feats': monster_feats,
        'i_like_it_url': request.build_absolute_uri(),
        'inaccurate_url': request.build_absolute_uri(),
        'display_3e_warning': is_3e_edition(monster.rulebook.dnd_edition),
    }, context_instance=RequestContext(request))

dataset/ETHPy150Open dndtools/dndtools/dndtools/dnd/monsters/views.py monster_detail/original