By mid-level I'm assuming the players have basic throwing skills, and know basic formations like V stack, H stack, and zone O and D.
1. What I found to be effective during my coaching experience was to focus on one aspect of the game each week. For example if I felt the team needed to improve on playing the H stack, I would choose or invent drills that focus on vertical cutting, handler motion, and sideline plays. If the team needed to work on advanced catching, I would use drills that focused on one handed catching, reading, and skying.
There are tons of drills available online, like
http://www.ultimatehandbook.com/blog/. But what I like to do is to choose one basic drill, and make 3-4 different variations on it with increasing difficulty. I would start with the most basic, and gradually step it up every 15 minutes. At the very end I would make it a game and introduce some competition. It could be last man standing, or tournament elimination, or most number of points. It doesn't really matter as long as the players are motivated and are having fun. Having some fun during practice is a huge factor for getting regular attendance.
2. Ultimate is a social sport and you will always have people who are there just to be there with their friends. Depending on how many players you have, you could split the group into two and have separate trainings for each. That way the more motivated players will get a good run and the social players can also have fun.
What motivates a player the most is having a goal that seems slightly out of reach. For one season I had a athletic pickup team that wasn't used to playing organized Ultimate. We had both a B pool team and a C pool team. And my goal for both teams at the start of the season was to advance up to the next pool. I would constantly remind the team of our goals and make sure they understood that each practice was bringing us closer to our goal. When the league finally started we not only reached our goal, but far surpassed it. The pool B team became a legitimate pool A team. And the pool C team destroyed all the other pool C teams and stayed firmly in pool B.
3. A team should prepare for competition by simulating competition as much as possible. Which means scrimmaging or having exhibition games against other clubs. By constantly exposing your players to competition and game situations, they will become more comfortable with the pressure and nerves one feels during a game. Have a reward for the winning team and a penalty for the losing team so that all players have something to play for. Coach as if it's a real game. Take out players who aren't playing hard and make sure everyone is taking it seriously.
Before a competition you should also address your team weaknesses. That way it not only makes it less of a weakness, it also gives your players more confidence because they practiced it.
There's a ton more I can say, but those are the most important points in my opinion. Hope it helps.